我有這個數據填充一個名爲Number
列(列類型爲nchar):訂單僅一個字符串的數字部分
1
2
1091
3
20
2B
我想,讓這個命令的select語句:
1
2
2B
3
20
1091
我該如何做到這一點?謝謝大家的幫助
(編者)
我有這個數據填充一個名爲Number
列(列類型爲nchar):訂單僅一個字符串的數字部分
1
2
1091
3
20
2B
我想,讓這個命令的select語句:
1
2
2B
3
20
1091
我該如何做到這一點?謝謝大家的幫助
(編者)
可以通過轉換爲數字,你發現的第一個非的位置後執行一些技巧-數字。即使原始字符串不包含字母,最後添加一個隨機字符也會使所有字符串都相同。
SELECT [Number] FROM dbo.TableName
ORDER BY CONVERT(INT, LEFT(Number, PATINDEX('%[^0-9]%', Number + 'z')-1));
謝謝Aaron。可愛的作品。 – BernieSF
亞倫 - 我認爲讓未來的訪問者使用正確的術語是非常重要的。有時,文檔鏈接是一種獎勵,這種情況幾乎是必需的。搜索'Sql Server'和'convert'會產生很多錯誤的結果。我認爲*它會轉換爲整數。你的表達中的'-1'完全令我困惑。如果代碼完成了我認爲它所做的事情 - 也就是隻提取出Number的數字部分,那麼32a,32fred和32c將會無序地出現,因爲字母部分沒有考慮。 –
@Jeremy編碼問題的解決方案不應該包含解決方案中使用的每個函數的定義。我真的需要寫一段關於CONVERT的用途嗎? OP當然不這麼認爲,你也許是唯一一個也會期待的讀者。如果需要進一步分類,則應在問題中說明。如果我*認爲*應按照您的建議進行某種分類,那麼答案會比OP問得更多*。所以最後,我認爲這個答案能幫助OP比指向Oracle和MySQL的自然排序更有幫助嗎?是。 –
什麼你正在尋找被稱爲自然排序,這是從正規那種大多數系統給出不同的。我在Stack Overflow發現了一些帖子,涵蓋了各種流行的SQL引擎中的自然排序,包括關於SQL Server
的一個簡要討論。
這裏的想法可能讓你開始一個解決方案。
Oracle: How can I implement a "natural" order-by in a SQL query?
您可能需要改變,雖然語法爲您的SQL引擎。
發現了另一個版本的MySQL:
找不到任何爲SQL Server呢。
EDIT3
啊,這一個涵蓋某些SQL Server的想法太:
我不明白這些鏈接中的任何一個如何幫助解決問題。 –
@AaronBertrand - OP需要一個自然的排序,儘管OP沒有使用這個詞我的名字。由於SQL引擎沒有內置的自然排序,因此必須使用表達式進行排序。我的鏈接涵蓋了人們以各種形式的SQL獲得自然排序的不同方式。其中一個可能已被改編。 –
那麼他們並不需要它在Oracle或MySQL中,而MySQL的答案似乎也沒有任何有效的SQL Server解決方案,正如你所建議的那樣。我發現最近的是一個包含「MID」的程序,但這是一個Access函數,而不是SQL Server。 –
使用PATINDEX,請檢查這SQL Fiddle代碼。 @AaronBertrand剛剛回答,因爲我正在測試。
只需添加一些更多的價值和信息,請檢查this SQLServerCentral link那裏你可以找到更多的答案。
並檢查這Natural (human alpha-numeric) sort in Microsoft SQL 2005,很多有用的答案和變化。
一些downvoters可以評論什麼是錯的?我只是在已經有用的答案上添加了一些更多的信息......謝謝 – Yaroslav
EH,有人在這個問題上表示滿意。有+1提供文件,而不僅僅是一個神奇的咒語答案。 –
我還沒有投票(但),但通常如果你想添加信息到現有的答案,你添加一個評論,而不是一個額外的答案。 –
什麼是列類型? – NicoRiff
將值從2B更改爲3B的訂單? –
在第一部分中,第二部分3B中有2B。錯字? –