derin öz Ответов: 1

Sql char типы дат на сегодняшний день


у меня есть таблица с датами. Но на самом деле их тип-char ,и их формат-это не просто один тип. когда я пытаюсь обновить их, они становятся нулевыми, я не понимаю, почему.

выберите (случай, когда начальная дата, например '25.5.1986 00:00:00'
затем подстрока(startdate,6,4)+'/'+'0'+подстрока(начальная дата,4,1)+'/'+слева(дата начала,2)
когда startdate как '1.12.1986 00:00:00'
затем подстрока(startdate,6,4)+'/'+подстрока(начальная дата,3,2)+'/'+'0'+ слева(дата начала,1)
конец) как дата 2
из sample_employee

Что я уже пробовал:

у меня есть вопрос, у меня есть таблица с датами. Но на самом деле их тип-char ,и их формат-это не просто один тип. когда я пытаюсь обновить их, они становятся нулевыми, я не понимаю, почему.

выберите (случай, когда начальная дата, например '25.5.1986 00:00:00'
затем подстрока(startdate,6,4)+'/'+'0'+подстрока(начальная дата,4,1)+'/'+слева(дата начала,2)
когда startdate как '1.12.1986 00:00:00'
затем подстрока(startdate,6,4)+'/'+подстрока(начальная дата,3,2)+'/'+'0'+ слева(дата начала,1)
конец) как дата 2
из sample_employee

Patrice T

Как вы справляетесь с '11.12.1986 00:00:00' и '12.11.1986 00:00:00' ?
Который из них ноябрь?

1 Ответов

Рейтинг:
0

OriginalGriff

Не храните информацию о дате как VARCHAR или NVARCHAR - это всегда создает проблемы.
Всегда храните их как DATE, DATETIME или DATETIME2.

Измените свою БД, преобразуйте все существующие строковые значения в одно из вышеперечисленных и измените программное обеспечение для передачи значений DateTime в SQL.

И, пожалуйста, посмотрите, что делает like: это система сопоставления шаблонов на основе строк, так что это:

case when startdate like '25.5.1986 00:00:00' then
будет только когда-либо pas, когда строка, с которой вы сравниваете, точно равна "25.5.1986 00:00:00", а не для любого другого значения. Для использования типа вам нужны подстановочные знаки - для SQL это '%' для "любых символов" и "_" для "и одного символа"