如何從varchar中分離小數?例如,我如何從'97 .4N IU/ML'獲得'97.4'?SQL:從varchar提取小數
-1
A
回答
1
假設的數字部分將永遠在左邊,你可以做
修訂
之前我的解決方案只提取的字符串的小數部分,它沒有任何轉換。此外,如果您收到錯誤的數據,則無法保證您在該列中獲得的內容,因此很可能您也可能獲得科學表達式,因此最好在嘗試提取數字之前執行ISNUMERIC()
測試。使用Float類型從字符串轉換是很好的,因爲它也可以處理科學表達式,但將數字存儲爲浮點數不是一個好主意,因爲顯示爲2.70的浮點數可能不等於另一個浮點數顯示爲2.70,因爲在每個實例中系統決定存儲更多的精確位置,因此,如果您打算對數值進行任何比較或計算,則應該始終以固定的精度格式存儲數字。
CREATE TABLE MyTable(MyColumn VARCHAR(25))
GO
INSERT INTO MyTable(MyColumn)
VALUES
('1.23E+10')
,('2.23E+8')
,('2.235432E-6')
,('4 of 40')
,('500mg/day')
,('97.4N IU/ML')
,('No Maximun')
,(NULL)
,('')
,('See Appendix R')
GO
SELECT
CONVERT(DECIMAL(20,8),
CASE
WHEN IsNumeric(MyColumn)=1 THEN
CONVERT(FLOAT,MyColumn)
ELSE CONVERT(FLOAT,'0'+LEFT(MyColumn,PATINDEX('%[^0-9.]%',MyColumn)-1))
END) AS MyDecimal
,MyColumn
FROM MyTable
老回答
SELECT LEFT('97.4N IU/ML',PATINDEX('%[^0-9.]%', '97.4N IU/ML')-1)
所以對一列執行它看起來像這樣
SELECT LEFT(MyColumn,PATINDEX('%[^0-9.]%', MyColumn)-1) FROM MyTable
您可以測試(舊答案)在使用本SQL Fiddle
+0
謝謝!這對我所需要的是完美的。感謝您抽出時間。 –
相關問題
- 1. SQL Server從VARCHAR中提取INT
- 2. SQL order varchar(小數點)
- 3. SQL Server 2000 - 從存儲在VARCHAR中的XML中提取數據
- 4. SQL僅從varchar獲取數值(子串)
- 5. SQL從VARCHAR
- 6. 如何從SQL Server中的varchar列提取電話號碼?
- 7. 從時間戳記提取SQL小時
- 8. 從日期SQL提取小時PHP
- 9. SQL Server,CONTEXT_INFO()和varchar大小
- 10. 從PostgreSQL中的varchar中提取id號
- 11. 從varchar字段提取oracle日期
- 12. 如何從varchar列中提取值?
- 13. 轉換12小時至24小時,從VARCHAR列在SQL Server
- 14. 從浮點數中提取小數點
- 15. 從SQL數據庫提取值(整數)
- 16. 如何從MySQL中的列(varchar)中僅提取數值?
- 17. 從Oracle數據庫中的varchar串中提取字符
- 18. SQL - 從VARCHAR字段計數INT
- 19. 從SQL中的varchar列獲取前n個數字字符
- 20. 如何從time_t中提取小時數?
- 21. 從varbinary到varchar的SQL CONVERT
- 22. SQL Server 2014 - varchar(x)NULL大小
- 23. SQL提取數據
- 24. 從字符串中提取數據sql
- 25. 提取數據的SUM從XML在SQL
- 26. 從R提取數據由SQL?
- 27. SQL:從兩個表中提取數據
- 28. 無法從sql表中提取數據
- 29. 從SQL中提取Perfmon數據
- 30. 從表中提取數據SQL
字符串中是否有任何一致的模式,例如數字總是前3個字符? –
嘿大衛。是的,主角將始終是數字。不過,我的問題已得到解答。謝謝!! –