幾年前,我在一個數字主鍵存儲在[SQL Server] varchar列的系統上工作,所以在查詢BETWEEN操作:將數字數據存儲在文本列中的問題 - SELECT ... BETWEEN
SELECT ID FROM MyTable WHERE ID BETWEEN 100 AND 110;
結果:
100
102
103
109
110
11
這只是糟糕的設計。但是,我正在開發一個第三方ERP系統,您可以想象它需要通用且靈活;因此我們有各種各樣的表格,其中業務僅使用數字的字母數字字段可能會出現類似的問題。
我在猜測這是一個常見的問題;我有一個簡單的解決方案,但我很好奇別人如何解決這些問題。
我簡單的解決方法是:
SELECT ID FROM MyTable
WHERE ID BETWEEN iStartValue AND iEndValue
AND (LENGTH(ID) = LENGTH(iStartValue)
OR LENGTH(ID) = LENGTH(iEndValue));
如你不能告訴,這是一個Oracle系統,但我通常是在SQL Server的工作 - 這樣也許數據庫無關的解決方案是優選的。
編輯1:劃痕 - 我不明白爲什麼專有解決方案不受歡迎。
編輯2:感謝所有的迴應。我不確定我是否感到失望並不存在明顯的,複雜的解決方案,但我相當高興,看起來我沒有錯過任何明顯的東西!
我想我仍然更喜歡我自己的解決方案;這很簡單,它的工作原理 - 我有什麼理由不使用它?我不敢相信,如果有的話,其他解決方案提供的效率會降低很多。我認識到在理想世界中,這個問題不會存在;但不幸的是,我並不是在理想的世界中工作,而且往往是一個充分利用糟糕情況的案例。
我在一年左右沒有使用過Oracle,但是如果在執行轉換時遇到轉換錯誤,您是否會在上述語句中進行隱式轉換時得到轉換錯誤? – 2008-12-10 17:40:49
LENGTH是設計用來處理字符串的函數,所以沒有。 – 2008-12-12 15:13:49