日期的SQL正则表达式

swvgeqrz  于 2022-10-22  发布在  其他
关注(0)|答案(5)|浏览(261)

我只想在SQLServer中使用正则表达式获取日期。下面是我的行值。我只想取日期部分。

'JACKSONVILLE, FL                  2019-02-01 10:00:03 EST'
'JACKSONVILLE, FL       abc        2019-02-01 10:00:03 EST'

在此顺序中,数据存储在表行中。记录的长度可能不同。请建议

xcitsw88

xcitsw881#

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))
8yparm6h

8yparm6h2#

PATINDEX可以与SUBSTRING组合使用,以获取时间戳子字符串。
如果您想将其转换为带有时区的datetime类型,那么下面的Sql Snippet就可以工作了。
假设这些都在东部时间时区。

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)
r55awzrz

r55awzrz3#

如果记录具有固定长度,则使用左(…)和右(…)是最好的方式

select left(right('JACKSONVILLE, FL                  2019-02-01 10:00:03 EST', 23), 19)
bweufnob

bweufnob4#

sql服务器不支持regex,类似的模式是对模式的基本支持,但下面可以检查很多模式。在此查询中,所有月份都被视为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]%'
fafcakar

fafcakar5#

对于2位数的月和1位数的日,需要更多的“或”子句。这就是我得到的:

DateFild  LIKE '0[0-9]-0[1-9]-[1-2][0-9][0-9][0-9]'  or
DateFild  LIKE '0[0-9]-[1-2][0-9]-[1-2][0-9][0-9][0-9]'  or
DateFild  LIKE '0[0-9]-3[0-1]-[1-2][0-9][0-9][0-9]' OR
DateFild  LIKE '1[0-2]-0[1-9]-[1-2][0-9][0-9][0-9]'  or
DateFild  LIKE '1[0-2]-[1-2][0-9]-[1-2][0-9][0-9][0-9]'  or
DateFild  LIKE '1[0-2]-3[0-1]-[1-2][0-9][0-9][0-9]' Or
DateFild  LIKE '[1-9]-0[1-9]-[1-2][0-9][0-9][0-9]'  or
DateFild  LIKE '[1-9]-[1-9]-[1-2][0-9][0-9][0-9]'  or
DateFild  LIKE '[1-9]-[1-2][0-9]-[1-2][0-9][0-9][0-9]'  or
DateFild  LIKE '[1-9]-3[0-1]-[1-2][0-9][0-9][0-9]'  or 
DateFild  LIKE '0[0-9]-[1-9]-[1-2][0-9][0-9][0-9]'  or
DateFild  LIKE '1[0-2]-[1-9]-[1-2][0-9][0-9][0-9]'

相关问题