以字符串格式 (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
将 CONVERT
与 format-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
呃....
我有一个 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
将 CONVERT
与 format-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