SQL Server 13个月中的荷兰语varchar日期问题

时间:2018-04-13 12:21:18

标签: sql sql-server stored-procedures

我的数据库13-04-2018 1:05:00中有以下日期时间格式(作为varchar)。

我需要将其转换为以下格式:2018-04-13 01:05:00.作为日期时间。

正常转换功能无法执行此操作,因为它们会尝试执行第13个月,而该月份并不存在。这个错误:

  

导致将varchar数据类型转换为日期时间数据类型   在超出范围的价值。

有人知道如何转换此日期问题吗?

4 个答案:

答案 0 :(得分:5)

由于全世界所有不同的格式,使用日期时间始终是一种痛苦,无论语言如何。

要对您的问题进行排序,您需要使用格式样式,这是CONVERT的第三个参数。我个人在这里建议将其存储为日期时间,因为将日期时间存储为字符串绝不是一个好主意。稍后它会变得太乱,但如果以您希望的格式保存,它将保存为yyyy-MM-dd hh:mm:ss

SELECT CONVERT(DATETIME, '13-04-2018 1:05:00',103)

您可以创建自己的函数,将其格式化为所需的输出字符串。

CREATE FUNCTION FormatMyDate
    (@Date DATETIME) RETURNS VARCHAR(20)
AS
BEGIN
    RETURN FORMAT(@Date,'yyyy-dd-MM hh:mm:ss')
END

然后你可以在这样的SELECT语句中调用它:

SELECT dbo.FormatMyDate(yourDateCol) 
FROM yourTable

答案 1 :(得分:0)

这将从月份前一天的格式中取出日期并反转2个值(月和日)

SELECT CONVERT(DATETIME, '2018-13-04 01:05:00', 103);

结果: 2018-04-13 01:05:00.000

答案 2 :(得分:0)

这应该适合你的要求......

SELECT FORMAT(yourdate, 'yyyy-dd-MM')

答案 3 :(得分:0)

你的解决方案......

DECLARE @d DATETIME = GETDATE()
SELECT FORMAT ( @d, 'MM-dd-yyyy hh:mm:ss', 'de-de' ) AS 'Hoping your result'