使用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%的时间都很好,但是错误地匹配了一些不需要的日期格式错误,用户在月份之后放了逗号。
答案 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。