Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Преобразование к типу дата (число прочтений - 6546 )
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Преобразование к типу дата
19. Мая 2008 :: 07:19
Печать  
В шапке документа есть поле типа дата ДатаАкта, в таблице БД значение этого поля выглядит как 01.01.2008

Если не преобразовывать, то соответственно ругается в том смысле, что неплохо бы сконвертировать в тип дата
$ДокР.ДатаАкта  BETWEEN :НачДата AND :КонДата~
Syntax error converting datetime from character string

Если преобразовывать к типу дата функцией CAST
((CAST($ДокР.ДатаАкта) as DateTime) BETWEEN :НачДата AND :КонДата~)
Ругается
Incorrect syntax near 'CAST', expected 'AS'

А каким каком можно сравнить входит эта дата акта в заданный интервал?
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Преобразование к типу дата
Ответ #1 - 19. Мая 2008 :: 07:22
Печать  
Проблема в этой шильдочке имхо, получаем строку
:КонДата~
Попробуй кастануть именно это либо типа так с извратом:
:КонДата + ' 23:59:59.999'
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Преобразование к типу дата
Ответ #2 - 19. Мая 2008 :: 07:26
Печать  
Конечно ругается

((CAST($ДокР.ДатаАкта) as DateTime) BETWEEN :НачДата AND :КонДата~)

Скобочка то лишняя
  
Наверх
ICQ  
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Преобразование к типу дата
Ответ #3 - 19. Мая 2008 :: 07:30
Печать  
Точно точно скобочку лишнюю поставил. Все таки полезно посмотреть код на другом фоне. Спасибо всем принявших участие в обсуждении.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Преобразование к типу дата
Ответ #4 - 19. Мая 2008 :: 07:31
Печать  
$ДокР.ДатаАкта  BETWEEN :НачДата~~ AND :КонДата~~
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Преобразование к типу дата
Ответ #5 - 19. Мая 2008 :: 07:36
Печать  
ИХМО гораздо лучше вместо твоего cast
Код
Выбрать все
convert ( char(8),$ДокР.ДатаАкта,112  )
 

  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Преобразование к типу дата
Ответ #6 - 19. Мая 2008 :: 07:42
Печать  
Правильно, в данном случае, как посоветовал trad
trad писал(а) 19. Мая 2008 :: 07:31:
$ДокР.ДатаАкта  BETWEEN :НачДата~~ AND :КонДата~~

  
Наверх
ICQ  
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Преобразование к типу дата
Ответ #7 - 19. Мая 2008 :: 07:48
Печать  
1.CAST ($ДокР.ДатаАкта as DateTame) BETWEEN :НачДата AND :КонДата~
2.convert (char(8),$ДокР.ДатаАкта,112) BETWEEN :НачДата AND :КонДата~
3.$ДокР.ДатаАкта  BETWEEN :НачДата~~ AND :КонДата~~

Что обидно 2 и 3 вариант работают, а 1 нет Печаль
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Преобразование к типу дата
Ответ #8 - 19. Мая 2008 :: 07:49
Печать  
Только КонДата в этом случае будет указывать на Начало дня, так что при НачДата=КонДата выборка получится (почти) пустой, ну, я думаю, с этим справится будет не сложно
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Преобразование к типу дата
Ответ #9 - 19. Мая 2008 :: 07:51
Печать  
RuporAbsurda писал(а) 19. Мая 2008 :: 07:48:
1.CAST ($ДокР.ДатаАкта as DateTame) BETWEEN :НачДата AND :КонДата~
2.convert (char(8),$ДокР.ДатаАкта,112) BETWEEN :НачДата AND :КонДата~
3.$ДокР.ДатаАкта  BETWEEN :НачДата~~ AND :КонДата~~

Что обидно 2 и 3 вариант работают, а 1 нет Печаль

:КонДата~ - будет преобразовано в строку, типа '20080519z' и сравнивать ее с датой нельзя, о чем Скуль честно сообщает
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Преобразование к типу дата
Ответ #10 - 19. Мая 2008 :: 07:52
Печать  
trad писал(а) 19. Мая 2008 :: 07:31:
$ДокР.ДатаАкта  BETWEEN :НачДата~~ AND :КонДата~~

Сорри, а в чем прикол
А если нужен конец дня в формате Datetime?
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Преобразование к типу дата
Ответ #11 - 19. Мая 2008 :: 07:52
Печать  
Salimbek писал(а) 19. Мая 2008 :: 07:49:
Только КонДата в этом случае будет указывать на Начало дня, так что при НачДата=КонДата выборка получится (почти) пустой, ну, я думаю, с этим справится будет не сложно

Ты путаешь это не ДатаДок это $ДокР.ДатаАкта, я не думаю что авор пишет там дату с секундами Улыбка
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Преобразование к типу дата
Ответ #12 - 19. Мая 2008 :: 07:52
Печать  
Цитата:
trad писал(а) 19. Мая 2008 :: 07:31:
$ДокР.ДатаАкта  BETWEEN :НачДата~~ AND :КонДата~~

Сорри, а в чем прикол
А если нужен конец дня в формате Datetime?


Смотри предыдущий мой пост
  
Наверх
ICQ  
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Преобразование к типу дата
Ответ #13 - 19. Мая 2008 :: 07:54
Печать  
convert (char(8),$ДокР.ДатаАкта,112) BETWEEN :НачДата AND :КонДата~
А этот вариант тогда почему работает?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Преобразование к типу дата
Ответ #14 - 19. Мая 2008 :: 07:55
Печать  
RuporAbsurda писал(а) 19. Мая 2008 :: 07:48:
1.CAST ($ДокР.ДатаАкта as DateTame) BETWEEN :НачДата AND :КонДата~
2.convert (char(8),$ДокР.ДатаАкта,112) BETWEEN :НачДата AND :КонДата~
3.$ДокР.ДатаАкта  BETWEEN :НачДата~~ AND :КонДата~~

Что обидно 2 и 3 вариант работают, а 1 нет Печаль


Впервом варианте у тебя неявное преобразование типов поле типа DateTame
сравнивается с интервалом типа char вот поэтому sql и не может корректно сравнить
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать