我想使用SQL Server中的正则表达式仅获取日期。以下是我的行值。我只想获取日期部分。
'JACKSONVILLE, FL 2019-02-01 10:00:03 EST'
'JACKSONVILLE, FL abc 2019-02-01 10:00:03 EST'
按此顺序,数据存储在表行中。记录的长度可能会有所不同。请建议
答案 0 :(得分:0)
如果记录具有固定长度,那将是使用left(...)和right(..)的最佳方法
select left(right('JACKSONVILLE, FL 2019-02-01 10:00:03 EST', 23), 19)
答案 1 :(得分:0)
SQL Server对正则表达式的支持不是最好的,但是我相信这会起作用
SELECT SUBSTRING(column, PATINDEX('%[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]%', column),LEN(column))
答案 2 :(得分:0)
PATINDEX
可以与SUBSTRING
结合使用以获取时间戳子字符串。
如果要将其转换为带有时区的datetime类型,则可以使用下面的Sql Snippet之类的方法。
假设这些都在EST时区中。
select
SUBSTRING(col,
PATINDEX('%[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9] [A-Z][A-Z][A-Z]%', col)
,23) as timestamp_string,
(CONVERT(DATETIME2(0),
SUBSTRING(col,
PATINDEX('%[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9] EST%', col),
19))
AT TIME ZONE 'Eastern Standard Time') as timestamp_string_as_datetime2
from
(values
('JACKSONVILLE, FL 2019-02-01 11:00:03 EST'),
('JACKSONVILLE, FL abc 2019-02-01 12:00:03 EST cdf ')
) v(col)
答案 3 :(得分:0)
sql sever 不支持正则表达式,类似模式是对模式的基本支持而不是正则表达式,但下面可以检查很多模式。 在此查询中,所有月份都被视为 31 天。
SELECT * FROM TableName
WHERE
DateFild LIKE '%[1-2][0-9][0-9][0-9]-0[0-9]-0[1-9]%' or
DateFild LIKE '%[1-2][0-9][0-9][0-9]-0[0-9]-[1-2][0-9]%' or
DateFild LIKE '%[1-2][0-9][0-9][0-9]-0[0-9]-3[0-1]%' OR
DateFild LIKE '%[1-2][0-9][0-9][0-9]-1[0-2]-0[1-9]%' or
DateFild LIKE '%[1-2][0-9][0-9][0-9]-1[0-2]-[1-2][0-9]%' or
DateFild LIKE '%[1-2][0-9][0-9][0-9]-1[0-2]-3[0-9]%' Or
如果月或天可以有数字,你也应该添加这个条件
DateFild LIKE '%[1-2][0-9][0-9][0-9]-[0-9]-0[1-9]%' or
DateFild LIKE '%[1-2][0-9][0-9][0-9]-[0-9]-[1-9]%' or
DateFild LIKE '%[1-2][0-9][0-9][0-9]-[0-9]-[1-2][0-9]%' or
DateFild LIKE '%[1-2][0-9][0-9][0-9]-[0-9]-3[0-1]%'