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

Best way to find MIN of a bunch of dates in string format (SQL)

呃....

我有一个 SQL table,其中有一堆表示日期的字符串,格式如下:dd/MM/yyyy HH:mm:ss.

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

关于执行此操作的最简单方法的任何建议。

"don't store dates in non-standard string formats" 的答案是正确的,但没有帮助:(

将日期转换为数字形式,例如纪元或与特定日期的差异,然后按其对应的数值排序。

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

set dateformat dmy

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

这是关于日期格式的文档。 https://docs.microsoft.com/en-us/sql/t-sql/statements/set-dateformat-transact-sql

CONVERTformat-style 103 一起使用:

SELECT
MIN(CONVERT(DATETIME, yourColumn, 103))
FROM yourTable

您可以使用 DATETIMEFROMPARTS 函数将字符串转换为日期,然后使用最小值

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

刚刚写了一个示例程序:

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