以字符串格式查找一堆日期MIN的最佳方法(SQL)

时间:2017-10-23 14:13:23

标签: sql-server date string-conversion

Eugh ....

我有一个SQL表,其中包含一串以这种格式表示日期的字符串:dd/MM/yyyy HH:mm:ss

我需要找到最短的日期,并且非常希望在SQL中这样做,而不是将其拉入其他语言并在那里进行计算(例如C#)。

有关最简单方法的任何建议。

回答"不要以非标准字符串格式存储日期"是正确但没有帮助:(

5 个答案:

答案 0 :(得分:4)

CONVERTformat-style 103

一起使用
SELECT
MIN(CONVERT(DATETIME, yourColumn, 103))
FROM yourTable

答案 1 :(得分:2)

您可以设置会话的日期格式,然后将列转换为日期时间。

set dateformat dmy

select min(convert(datetime, YourColumn))
from YourTable

以下是dateformat的文档。 https://docs.microsoft.com/en-us/sql/t-sql/statements/set-dateformat-transact-sql

答案 2 :(得分:0)

您可以使用DATETIMEFROMPARTS函数然后使用miniumum

将字符串转换为日期
CREATE TABLE #DateString (
    StringDate CHAR(19)
)

INSERT INTO #DateString
VALUES
('23/10/2017 10:22:10'),
('23/10/2017 10:23:10'),
('23/10/2017 10:26:10'),
('23/10/2017 10:25:10')

SELECT
    MIN(DATETIMEFROMPARTS(
        SUBSTRING(StringDate, 7,4),
        SUBSTRING(StringDate, 4,2),
        SUBSTRING(StringDate, 1,2),
        SUBSTRING(StringDate, 12,2),
        SUBSTRING(StringDate, 15,2),
        SUBSTRING(StringDate, 18,2),
        0
    ))
FROM
    #DateString

答案 3 :(得分:0)

刚写了一个示例proc:

begin 
DECLARE @Date varchar(25)
set @Date='23/10/2017 10:30:30'
SELECT CONVERT(datetime, @Date, 103)
end

O / P

DateTimeField
2017-10-23 10:30:30.000

答案 4 :(得分:-1)

将日期转换为数字形式,例如纪元或某个日期的差异,然后按相应的数值排序。