|
Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема
|
Мъка... мъка... MSSQL 2000 е пълна трагедия
|
|
Автор |
headhunter (huntz orcxez) |
Публикувано | 03.10.03 14:05 |
|
Онзи прекрасен ден реших да направя едно прекрасно view, в което има само 1 таблица.
SQL запитването имаше приблизително следния синтакс:
SELECT user_ID FROM orders WHERE ((order_date BETWEEN '09.09.2003' AND '30.09.2003') AND (user_ID IN(3, 4, 5)))
Е не щя!!! Ако го разбия на 2 запитвания, отделно BETWEEN и отделно IN си бачка. Пробвах и без BETWEEN, а по бабешката: order_date > 'dd.mm.yyyy' AND order_date < 'dd.mm.yyyy', пак не щя.
Елементарно запитване, което даже в Access заработи. Не говоря за PostgreSQL или Oracle - там си бачка без проблем.
За Бога! Кой е луд да им купува на тия софтуера?!?!?!![](http://i.dirbg.com/clubs/icons/crazy.gif)
General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
| |
Тема
|
Re: Мъка... мъка... MSSQL 2000 е пълна трагедия
[re: headhunter]
|
|
Автор | zip (Нерегистриран) |
Публикувано | 03.10.03 16:47 |
|
така пробва ли
SELECT EmployeeID FROM orders
WHERE ((OrderDate BETWEEN '2003-09-09' AND '2003-09-30') AND (EmployeeID IN(3, 4, 5)))
| |
Тема
|
Re: Мъка... мъка... MSSQL 2000 е пълна трагедия
[re: zip]
|
|
Автор |
headhunter (huntz orcxez) |
Публикувано | 03.10.03 18:01 |
|
пробвах..
не зависи от количеството скоби, да му го...
е аз си реших проблема с повече от един селект, ама бива ли така?!
И не мога да разбера защо подобно запитване под Access бачка, а в MSSQL не.
както и да е.. той проблема беше преди 2 седмици. аз сега случайно влезнах в този клуб и реших да се ожаля.
General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
| |
Тема
|
Re: Мъка... мъка... MSSQL 2000 е пълна трагедия
[re: headhunter]
|
|
Автор |
Пepин (овълчил се) |
Публикувано | 03.10.03 20:07 |
|
А всъщност проблема какъв точно беше? Какво съобщение за грешка дава?
"Lie still and don't move and a bear won't hurt you" they said.
| |
Тема
|
Re: Мъка... мъка... MSSQL 2000 е пълна трагедия
[re: Пepин]
|
|
Автор |
headhunter (huntz orcxez) |
Публикувано | 06.10.03 16:20 |
|
Ами ето примерно запитване:
SELECT ID_kokoshka FROM kokoshki WHERE (ID_kokoshka IN (1, 2, 3) AND (data_na_izlupwane BETWEEN '2003-09-01' AND '2003-09-30'))
И съобщението на MS-SQL за грешка:
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
Странното е, че като в IN клаузата подам само едно число, това работи без грешка. Или ако напиша само: SELECT ID_kokoshka FROM kokoshki WHERE data_na_izlupwane BETWEEN '2003-09-01' AND '2003-09-30' също работи. Значи ако имам в IN повече от едно число и ако използвам BETWEEN някакви дати - MS SQL умира. Няма логика за едно запитване да няма проблем с conversion of a char data type, а в друго да има. Ако използвам вместо BETWEEN - data_na_izlupwane > '2003-09-01' AND data_na_izlupwane < '2003-09-30' пак не ще.
Направих си една симулацийка на Access и една в PostgreSQL - бачка във всички случаи.
General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
| |
Тема
|
Мъка... мъка... headhunter е пълна трагедия
[re: headhunter]
|
|
Автор |
Minavasht (случайно) |
Публикувано | 06.10.03 16:35 |
|
За съжаление които не чете псува ...
ако беше отворил 'T-SQL' help-a 5 paragraph e
'BETWEEN
Specifies a range to test.
Syntax
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
Arguments
test_expression
Is the expression to test for in the range defined by begin_expression and end_expression. test_expression must be the same data type as both begin_expression and end_expression.
NOT
Specifies that the result of the predicate be negated.
begin_expression
Is any valid Microsoft® SQL Server™ expression. begin_expression must be the same data type as both test_expression and end_expression.
end_expression
Is any valid SQL Server expression. end_expression must be the same data type as both test_expression and begin_expression.
AND
Acts as a placeholder indicating that test_expression should be within the range indicated by begin_expression and end_expression.
'
Хората са си специфицирали какво прави between. Ако не ти харесва не го използвай ... ако го искаш използвай cast. Но никои добър програмист не сравнява два различни типа надявайки се че auto-casta ще направи таман каквото иска тои. Позачети good coding practices. Това че Progress или бозата Access не те пляскат през ръцете нищо не значи. Попиши и на C така и после псувай C-то че не читаво ...
btw Oracle също иска да бъде кастнато
надявам се ти помогнахРедактирано от Minavasht на 06.10.03 16:43.
| |
Тема
|
Re: Мъка... мъка... headhunter е пълна трагедия
[re: Minavasht]
|
|
Автор |
headhunter (huntz orcxez) |
Публикувано | 06.10.03 18:21 |
|
Въх, че ме ухапа.
Съгласен съм по принцип с това, което си написал. Все пак като нещо изпищи, че не може да конвертира логично е да си помисля за каст. Пробвах и с CAST и с CONVERT - все същата дупа. И пак повтарям - на говното Access работи, на PostgreSQL също (а той определено не е говно), и на Oracle го тествах ('щото нещо ме амбицира ) и пак си бачка.
Все още обаче имам известни съмнения по въпроса, защо, когато викам само BETWEEN не ме пляска през ръцете, а когато в WHERE клаузата добавя IN ме пляска?
На C никога не съм псувал. ![](http://i.dirbg.com/clubs/icons/wink.gif)
General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
| |
Тема
|
Re: Мъка... мъка... MSSQL 2000 е пълна трагедия
[re: headhunter]
|
|
Автор |
Пepин (овълчил се) |
Публикувано | 07.10.03 02:35 |
|
Хм. Ами при мен в аналогична ситуация - целочислено поле и поле дата - върви. Странно.
"Lie still and don't move and a bear won't hurt you" they said.
| |
Тема
|
Re: Мъка... мъка... MSSQL 2000 е пълна трагедия
[re: headhunter]
|
|
Автор |
Пepин (овълчил се) |
Публикувано | 07.10.03 02:39 |
|
Значи следното query го пускам на pubs:
SELECT *
FROM sales
WHERE (stor_id IN (6380, 7066)) AND (ord_date BETWEEN '1-1-1900' AND '1-1-2100')
резултат:
stor_id ord_num ord_date qty payterms title_id
------- -------------------- ------------------------------------------------------ ------ ------------ --------
6380 6871 1994-09-14 00:00:00.000 5 Net 60 BU1032
6380 722a 1994-09-13 00:00:00.000 3 Net 60 PS2091
7066 A2976 1993-05-24 00:00:00.000 50 Net 30 PC8888
7066 QA7442.3 1994-09-13 00:00:00.000 75 ON invoice PS2091
(4 row(s) affected)
Да не би да има нещо около формата на датите?
"Lie still and don't move and a bear won't hurt you" they said.
| |
|
пуснах твоето куири в Northwind и смених имената на полетата и датите за да пасват на таблицата.......
ами елементарно уотсън - работи ако конвертираш датите....
SELECT CustomerID
FROM Orders
WHERE (OrderDate BETWEEN CONVERT(DATETIME, '1996-08-08 00:00:00', 102) AND CONVERT(DATETIME, '1996-09-25 00:00:00', 102)) AND
(CustomerID IN (N'VINET', N'QUICK'))
така работи на пушка...))
а, пропуснах.....
защо работи в аксеса - защото там автоматичното конвертиране явно е уцелило типовете
Редактирано от Topбaлaн на 07.10.03 08:40.
| |
|
Страници по тази тема: 1 | 2 | >> (покажи всички)
|
|
|