sql日期格式patindex正则表达式取代召回

时间:2016-09-16 15:05:29

标签: sql patindex

使用SQL,是否有一种优雅的方法可以删除“#”。 ' RD'和' st'约会之后?我正是这样做的,但我更喜欢像正则表达式回忆一样(例如下面的例子)。

请不要使用while循环功能。我已经看过那些解决方案,而且我正在寻找不那么难看的东西。

select Replace('september 8th, 2016', Substring('september 8th, 2016', PatIndex('%[a-z,A-Z][a-z,A-Z],%', 'september 8th, 2016'), 2), '')  statdate2

如果使用召回我可以做类似下面的事情

/(\s[0-9]+)[a-z,A-Z]{2}\,/

并回想一下替换

的日期编号
 $1,

as-is我的模式在sql示例中可能会输入任意两个字符后跟一个逗号,99%的时间都很好,但是错误地匹配了一些不需要的日期格式错误,用户在月份之后放了逗号。

1 个答案:

答案 0 :(得分:0)

你可以编写一个使用正则表达式召回的CLR函数。

顺便说一句,您当前的查询会替换整个日期字符串。

如果要替换的后缀出现在月份名称中,则会出现问题。

例如,当我在8月1日运行你的逻辑时,就像这样:

  select Replace('august 1st, 2016', Substring('august 1st, 2016', PatIndex('%[a-z,A-Z][a-z,A-Z],%', 'august 1st, 2016'), 2), '')  statdate2

我明白了:

  

2016年8月1日

如果您想要一个有效的非CLR解决方案,您可能需要通过它们在字符串中的位置来消除字符,而不是使用REPLACE()。含义在后缀之前获取所有字符,并将其与后缀之后的所有字符连接。它不会很漂亮,但就像我说的,如果你想要漂亮,你可以选择CLR。