Преобразовать строку в T-SQL (ГГГММДД) - PullRequest
2 голосов
/ 30 января 2011

У меня есть столбец exit_date с varchar, например 5/21/2008 0:00, и мне нужно обновить его до строки, такой как YYYYMMDD, есть ли способ сделать это?

5/21/2008 0:00  ==> 20080521  
1/1/2007 0:00   ==> 20070101

Как сделать что-то вроде

select convert('5/21/2008 0:00', 'YYYYMMDD').

Ответы [ 4 ]

4 голосов
/ 30 января 2011

CONVERT допускает стиль для конвертации datetime / varchar в обоих направлениях. Сказав это, у вас есть формат, которого нет в списке. И у вас на самом деле тоже есть 2 преобразования: вам нужно сначала получить их в datetime

В моей локальной установке SQL с настройками по умолчанию «us_english» это работает «из коробки»

select convert(datetime, '5/21/2008 0:00')

* Таким образом, 1006 *

select convert(char(8), convert(datetime, '5/21/2008 0:00'), 112)

Вы можете использовать SET LANGUAGE для временного изменения в us_english

2 голосов
/ 30 января 2011
1 голос
/ 06 июля 2011

Я только что опубликовал функцию в своем блоге для поддержки преобразования дат в T-SQL с использованием масок формата в стиле .Net.Не пытаясь подключить мой блог или что-то еще, это просто, где я публикую свои фрагменты кода.

Используя мою функцию SELECT dbo.fnc_FormatDate(getdate(), 'YYYYMMDD') будет делать то, что вы хотите.

http://bitmugger.blogspot.com/2011/07/convert-t-sql-datetime-to-strings-using.html

1 голос
/ 30 января 2011

Сначала я не увидел, что это был столбец varchar , который нуждался в преобразовании.

Так что, как я уже сказал в своем комментарии к ответу Гидона, в основном вы должны поступить такэто: CONVERT(varchar(8), CAST(your_varchar_date AS datetime), 112).

Если вы конвертируете значения на месте, то вот более полный пример того, как его применить:

UPDATE your_table
SET exit_date = CONVERT(varchar(8), CONVERT(datetime, exit_date), 112)
...