2016-02-16 2 views
0

Мне нужно установить часы, минуты и секунды в определенном столбце datetime до 00: 00: 00.0 после копирования значений даты и времени из другого столбца.Как использовать функцию преобразования в SQL Server 2012?

В таблице assignments У меня есть столбец DateTime activation_date, в которую я просто скопированный DateTimes из другого столбца даты и времени creation_date для строк, которые имеют null как их activation_date значений. Оба столбца находятся в одной таблице. При следующем:

UPDATE assignments 
SET activation_date = creation_date 
WHERE activation_date IS NULL; 

Теперь, часы, минуты и секунды в activation_date столбце должны быть всегда 0: 00: 00,0, что не так в creation_date значений.

Например: Скопированное значение 2015-10-08 12:09:45.743, но я хочу, чтобы это было 2015-10-08 00:00:00.0 в его новом доме, который является колонкой activation_date.

я узнал, что есть функция в SQL Server 2008 и выше для этого, называется

SELECT CONVERT(Date, GETDATE()) 

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

SELECT CONVERT(date, activation_date) AS activation_date 
FROM assignments 

Теперь, будучи простым выбором, это, конечно, ничего не меняет. Как я должен использовать эту функцию в методе UPDATE и SET, находится вне меня. Любая помощь приветствуется. Спасибо.

+0

Поместите тот же код конверсии в оператор обновления. Так же. –

ответ

1

Поскольку вы используете версию SQL 2012, как использовать функцию FORMAT и сделать что-то вроде этого?

SELECT FORMAT(@date, 'yyyy-MM-dd 00:00:00.0') 

результат будет что-то вроде ниже:

result: 2016-02-16 00:00:00.0 

И тогда ваше обновление будет то, как показано ниже:

UPDATE assignments 
SET activation_date = FORMAT(creation_date, 'yyyy-MM-dd 00:00:00.0') 
WHERE activation_date IS NULL; 

Для некоторых ссылок формата, я забыл ссылку, где я нашел это, но я сохранил это в своих SQL-фрагментах, поэтому я поделился с вами следующими различными форматами, которые вы можете использовать :)

/* 
FORMAT(). In my mind, this single function is one of the hands-down best new features of 
SQL Server 2012, simply because the functionality that it provides has been so sorely needed 
for so long. And for .NET developers, the immediate and obvious benefits of this new function 
should be readily apparent just by looking at Figure 6. Another thing that I like about the new 
FORMAT() function is that it represents an additional influx of CLR functionality directly into 
T-SQL -- something that I hope to see more of in the future. 
*/ 

SELECT 
     FORMAT(GETDATE(), 'yyyy-MM-dd') AS [ISO Formatted Date], 
     FORMAT(GETDATE(), 'yyyy-MM-dd hh:mm:ss') AS [Full ISO], 
     FORMAT(GETDATE(), 'MMMM dd, yyyy') AS [Long-hand Date (EN)], 
     FORMAT(GETDATE(), 'MMMM dd, yyyy', 'fr-FR') AS [French Date], 
     FORMAT(22.7, 'C', 'en-US') AS [US Currency], 
     FORMAT(22.7, 'C', 'en-GB') AS [UK Currency], 
     FORMAT(99 * 2.226, '000.000') AS [Padded Decimal], 
     FORMAT(12345678, '0,0') AS [Finally: Commas in Large Numbers] 
; 
+1

Ваш ответ сделал трюк. Я даже не знал, что такая функция FORMAT существует! В моем случае это гораздо удобнее. Спасибо! Мне действительно нужно начать изучать SQL Server больше ... –

+0

@SteveWaters 'FORMAT' функция появилась только в версии SQL Server 2012 и выше .. рад, что я помогу, ответьте выше, чтобы поделиться с вами некоторыми классными форматами, которые вы можете использовать:) – Japongskie

+0

Да, спасибо за это тоже. Обязательно начнет использовать их, когда это необходимо. –

Смежные вопросы