SQL查询-字符串中任意日期的模式匹配

SQL查询-字符串中任意日期的模式匹配,sql,sql-server,Sql,Sql Server,我正在使用Microsoft SQL Server 2008 如果表中的任何记录包含任何日期,我希望显示结果。 例如:如果存在值为GT3429062020HYHK的记录(因为其中有29062020,即今天的日期),则查询应返回该特定记录。如果您搜索的日期保证为DDMMYYY格式(如示例中所示),则可以使用 target_column LIKE '%[0123][0-9][01][0-9][12][0-9][0-9][0-9]%' 这将查找以下模式: 0-3(一天中的十分之一) 0-9(一天中的

我正在使用Microsoft SQL Server 2008

如果表中的任何记录包含任何日期,我希望显示结果。
例如:如果存在值为GT3429062020HYHK的记录(因为其中有29062020,即今天的日期),则查询应返回该特定记录。

如果您搜索的日期保证为DDMMYYY格式(如示例中所示),则可以使用

target_column LIKE '%[0123][0-9][01][0-9][12][0-9][0-9][0-9]%'
这将查找以下模式:

0-3(一天中的十分之一)
0-9(一天中的一部分)
0 | 1(月的十分之一)
0-9(本月的部分时间)
1 | 2(一年中的数千部分)
0-9 x 3(剩余年份数字)

如果你的日期都保证发生在本世纪,你可以进一步细化到

target_column LIKE '%[0123][0-9][01][0-9]20[012][0-9]%'

是否所有日期的格式都与示例中的相同?@Oso是的,所有日期都采用该特定格式(ddmmyyy)。@SriLakshmanaTeja如果对您有效,您应该将其标记为答案。@Oso如果日期格式为yyyymmdd,模式是什么?将代表年份的最后四个空格移到前面,并交换DD和MM:
'%[12][0-9][0-9][0-9][01][0-9][0123][0-9]%
@Oso,这里它选择的是值为35052020(ddmmyyyy)的日期,因为该日期不存在,所以不应如此。您能回顾一下您的逻辑吗?@SriLakshmanaTeja您不能在SQL Server 2008中生成一条只与字符串中的有效日期匹配的语句,您需要几个条件语句。鉴于我的回答解释了模式是如何工作的,这将是一个很好的机会让您了解如何构建它们。您需要对月+日数组合进行单独匹配(包括闰年的第二个二月模式),或者需要提取字符串并查看是否可以成功地将其转换为日期。我推荐选项2,它更难,但会更短,重复性更少。