2016-09-16 65 views
0

使用SQL,是否有一種優雅的方式來刪除日期後的'th''rd'和'st'?這裏是我如何做,但我寧願做一些像正則表達式回憶(下面的例子)。sql日期格式patindex正則表達式替換召回

請不要帶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, 

什麼作爲,是我的模式在礦井SQL示例可以拉在任何兩個字符後面跟着一個逗號,這個逗號在99%的時間內都很好,但是確實會匹配一些不想要的日期錯誤格式,用戶在該月份後放置逗號。

回答

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 

我得到:

augu 1年,2016年

如果你想有一個非CLR解決方案的工作,你可能需要通過它們在字符串中的位置來消除字符,而不是使用REPLACE()。意思是在後綴之前獲取所有字符,並將其與後綴後的所有字符連接起來。它不會很漂亮,但正如我所說,如果你想漂亮,你可以去CLR。

+0

謝謝,是的,我想避免CLR。順便說一句,我在SQL Mgmt Studio中運行了SQL,它取代了數字後綴。 –

+0

這真的是應該在前端處理的那種東西。 SQL不適用於這類工作。 –

+0

我同意,但我不控制前端。 –