2017-09-01 40 views
0

我有一個有效的狀態列表說'dc','Nu','tN','VA'。 我也有無效列表/垃圾狀態說「AA」,「BB」,「CC」如何創建一個查詢,以任何情況下更新匹配的記錄到大寫

現在我想要做一個更新,將在大寫更新有效狀態,這樣我可以得到以下更新的數據: 'DC', 'NU', 'TN', 'VA'

這是行不通的:

update states set state = upper(state) where state in ('DC', 'NU', 'TN', 'VA'); 

任何方式,如果其有效的一個小案例更新到CAPS?

UPDATE:

我可以在任何情況下,一個特定的狀態例如'DC'或'dc'或'dC'或'Dc'。很明顯,我可以做點像update states set state = upper(state) where state in ('DC', 'dc', 'dC', 'Dc')。但是對於同一個州來說,它多出一次。沒有任何優雅的方式嗎?

+3

你試過'其中大寫(州)(...' – Siyual

+1

?誠實地說,這就像是一個技巧問題 – Mokadillion

+0

看到我的問題,它與你提到的一樣,但在任何情況下,我都可以有一個特定的狀態,例如'DC'或'dc'或'dC'或'Dc' ('DC','dc','dC','Dc')'中的狀態更新狀態set state = upper(state)。但是對於同一狀態它多次提及多次沒有任何優雅的方式嗎? –

回答

4

有沒有必要做in ('DC', 'dc', 'dC', 'Dc')等,您可以強制列是Upper(),只有那些比較值:

update states 
set state = upper(state) 
where Upper(state) in ('DC', 'NU', 'TN', 'VA'); 
+0

看起來像一個合理的解決方案。檢查它。 –

+0

@Siyual這是一個很好的解決方案,因爲我們知道沒有拼寫問題,因爲這是適用於美國州的縮寫。但是,一般來說,這個解決方案可能會有問題。查看答案[這個問題](https://stackoverflow.com/q/7005302/119477)如果你想使用索引的狀態欄,以加快搜索速度是使用ILIKE或citext模塊 –

+0

只是要小心...在這種情況下,你應該在upper(state)上創建一個索引。 – Arkhena

相關問題