如何在T-SQL中将格式为mm / dd / yyyy的字符串转换为yyyy-mm-dd

时间:2016-06-29 21:24:37

标签: sql-server tsql datetime

我有一个日期存储一个mm / dd / yyyy形式的字符串,它被传递到SQL Server SP以插入到数据库中。如何以yyyy-mm-dd格式转换它,以便SQL Server实际将其正确插入到具有日期时间类型的列中?只是保持字符串mm / dd / yyyy似乎没有做任何事情。

3 个答案:

答案 0 :(得分:2)

只要有可能,您应该避免使用与文化相关的日期格式。

看看这个:

DECLARE @StringDate VARCHAR(100)='06/29/2016';

SET LANGUAGE ENGLISH;
SELECT CAST(@StringDate AS DATE)

/*

Throws an exception!

SET LANGUAGE GERMAN;
SELECT CAST(@StringDate AS DATE)
*/

了解TSQL: CONVERT及其格式。您的格式是数字101:

SELECT CONVERT(DATE,@StringDate,101)

最好是使用独立格式You might read this

答案 1 :(得分:0)

您可以使用PARSE()从特定于文化的格式创建DATETIME对象,然后将其转换为所需的字符串:

select convert(varchar(20), parse('02/15/2016' as datetime2 using 'en-US'), 20);

20是CONVERT()的ODBC日期样式(YYYY-mm-dd)的特定代码。

答案 2 :(得分:0)

有三种方法可以做到这一点:

您可以事先设置DATEFORMAT设置:

SET DATEFORMAT mdy;
INSERT INTO Table1 (DateCol) VALUES ('09/30/2016');

或者您可以使用CONVERT功能:

INSERT INTO Table1 (DateCol) VALUES (CONVERT(datetime, '09/30/2016', 101))

或者最后您可以使用PARSE功能,这样会更灵活,因为它会接受其他日期格式,例如' 2016年9月30日星期五'但显然有点慢:

INSERT INTO Table1 (DateCol) VALUES (PARSE('09/30/2016' as datetime using 'en-US'))
相关问题