Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 почему у меня не выходит сравнить даты ?  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1117
у строк у которых CODE=1035 в таблице ZAK_PROPS подрузамевается , что хранятся даты.
а возможно и некорректные даты. так вот я сначала проверяю на корректность , собираю все такие строки , потом произвожу отбор
where date1>=@d1 and date1<=@d2

но возникает ошибка
Ошибка преобразования datetime из символьной строки.

почему она возникает и как с ней бороться ума не приложу .

интересно ,что происходит конфликт именно в where date1>=@d1 and date1<=@d2

так как если убрать , то выводит без ошибки
declare @d1 datetime ,
		@d2 datetime 


select @d1  = '20000101'
select @d2  = '20121231'


select * from

(
select OBJECTID,

cast (VALUE as datetime) as date1


from ZAK_PROPS where CODE=1035 and isdate(VALUE)=1


) as gg

where date1>=@d1 and  date1<=@d2
6 авг 15, 12:03    [17983038]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
andron81
подрузамевается , что хранятся даты.

Т.е. вы не знаете точно, что и каком виде там хранится ?
6 авг 15, 12:05    [17983053]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
Maxx_UA
Guest
andron81,

скорее всего у вас в строке в таблице храниться дата в неправильном формате
6 авг 15, 12:06    [17983068]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1117
Maxx_UA
andron81,

скорее всего у вас в строке в таблице храниться дата в неправильном формате



блин, да это понятно !!!!

там бабки курицы вводят типа даты . в виде 01.01.2015

бывает что косячат , скажем введут вот так 01.012015 или ещё хуже.

я такие вещи и пытаюсь отсекать isdate . и работаю только , если isdate даст единичку как вы видите.
6 авг 15, 12:08    [17983077]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
cast (VALUE as datetime)
происходит раньше, чем isdate(VALUE)=1.
6 авг 15, 12:09    [17983085]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Если клиента не можете переписать, то введите ограничение на поле предполагаемой даты или проверяйте триггером, дабы выдать клиенту вразумительное сообщение. Не допускайте хранения недостоверных данных в базе, это один из основных постулатов.
6 авг 15, 12:11    [17983100]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
Maxx_UA
Guest
andron81
Maxx_UA
andron81,

скорее всего у вас в строке в таблице храниться дата в неправильном формате



блин, да это понятно !!!!


Тогда о чем вопрос то ? Почему сервер не понимает ,что вы хотите чтоб он вам отдал дату ?
6 авг 15, 12:12    [17983109]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1117
Владислав Колосов
cast (VALUE as datetime)
происходит раньше, чем isdate(VALUE)=1.


да вот вы правы скорее всего.


буду делать временную таблицу , туда складывать результат запроса по isdate, затем следующим буду обрабатывать
6 авг 15, 12:27    [17983212]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
Maxx_UA
Guest
andron81,

и заодно передаетй огромный привет архитектору решения
6 авг 15, 12:49    [17983381]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1117
Maxx_UA,

решения чего ?
6 авг 15, 13:07    [17983510]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
o-o
Guest
andron81
Maxx_UA,

решения чего ?

тому, кто придумал дату в строке хранить
6 авг 15, 13:09    [17983529]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
andron81
решения чего ?

решения хранить даты в символьных полях
6 авг 15, 13:09    [17983531]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1117
Glory,

ну дело в том что таблица ZAK_PROPS это помойная таблица реквизитов. там хранятся реквизиты , а они могут быть всех простейших типов : строка, число , дата.

поэтому таково.

делал это не я, но вот так.

Правильно подсказывали обрабатывать на стадии ввода даты на корректность . мог бы сделать например триггером. но не сделал. теперь вот расплачиваюсь
6 авг 15, 13:14    [17983569]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
andron81,

омг , зачем временную таблицу?
select objectid,  date1
from
(
    select OBJECTID,
        case when isdate(VALUE)=1 then cast(value as datetime) else cast('19000101' as datetime) end date1
    from ZAK_PROPS where CODE=1035
) as gg
where date1>=@d1 and  date1<=@d2
6 авг 15, 13:15    [17983574]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
andron81
ну дело в том что таблица ZAK_PROPS это помойная таблица реквизитов. там хранятся реквизиты , а они могут быть всех простейших типов : строка, число , дата.

поэтому таково.

И почему дата не хранится в дата ?
6 авг 15, 13:16    [17983579]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1117
Glory
andron81
ну дело в том что таблица ZAK_PROPS это помойная таблица реквизитов. там хранятся реквизиты , а они могут быть всех простейших типов : строка, число , дата.

поэтому таково.

И почему дата не хранится в дата ?


потому что в одной таблица вся помойка реквизитов. реквизиты могут быть различных типов в зависимости от того какой мы заведем в справочнике
6 авг 15, 13:18    [17983596]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
andron81
потому что в одной таблица вся помойка реквизитов. реквизиты могут быть различных типов в зависимости от того какой мы заведем в справочнике

Ну так почему дате не назначен "простейший тип дата" ?
6 авг 15, 13:19    [17983606]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1117
Glory
andron81
потому что в одной таблица вся помойка реквизитов. реквизиты могут быть различных типов в зависимости от того какой мы заведем в справочнике

Ну так почему дате не назначен "простейший тип дата" ?



потому что значение любого реквизита будет хранится в поле VALUE. поэтому единственный тип в который можно запихнуть как дату , число или строку это varchar(255)
6 авг 15, 13:20    [17983620]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
andron81
Glory
пропущено...

Ну так почему дате не назначен "простейший тип дата" ?



потому что значение любого реквизита будет хранится в поле VALUE. поэтому единственный тип в который можно запихнуть как дату , число или строку это varchar(255)

Ну вот и поздравьте архитектора решения
6 авг 15, 13:21    [17983632]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1117
Glory,

поздравлю. а в чем собственно недостаток ?

довольно универсально
6 авг 15, 13:22    [17983636]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
andron81
а в чем собственно недостаток ?

довольно универсально

Тему вы создали надо пологать как раз из-за отсутствия недостатков.
6 авг 15, 13:23    [17983649]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
andron81
а в чем собственно недостаток ?
В том, что тип хранимого не контролируется никак.
Хранить как sql_variant и то лучше.
6 авг 15, 13:27    [17983666]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1117
Glory,

ну видимо у меня всё же пробелы в составлении запросов в сочетании нюансов.

а в чем ещё чревато ?
6 авг 15, 13:27    [17983673]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
andron81
ну видимо у меня всё же пробелы в составлении запросов в сочетании нюансов.

У вас пробелы в адекватности занесенных данных.
А то, что вы считаете адекватным, тоже может только казаться таковым
Например
02.01.2015 можно понимать и как 2ое января и как 1ое февраля

andron81
а в чем ещё чревато ?

Тем, что и все другие реквизиты содержат неадекватные значения.
6 авг 15, 13:30    [17983694]     Ответить | Цитировать Сообщить модератору
 Re: почему у меня не выходит сравнить даты ?  [new]
andron81
Member

Откуда: Смоленск
Сообщений: 1117
invm
andron81
а в чем собственно недостаток ?
В том, что тип хранимого не контролируется никак.
Хранить как sql_variant и то лучше.



не думаю что существовал на тот момент этот тип данных когда создавалось это всё
6 авг 15, 13:30    [17983699]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить