我想字符串值轉換爲浮動如的Sql轉換字符串值
User entered value Expected Result
1/2 0.5
1 1
1/4 0.25
1 1/2 1.5
如何這種價值轉換成SQL服務器?
我想字符串值轉換爲浮動如的Sql轉換字符串值
User entered value Expected Result
1/2 0.5
1 1
1/4 0.25
1 1/2 1.5
如何這種價值轉換成SQL服務器?
不漂亮,但工程
SELECT CAST(CASE WHEN CHARINDEX('/', val) > 0 THEN SUBSTRING(val, 0, CHARINDEX('/', val))
ELSE val END AS float)/
CAST(CASE WHEN CHARINDEX('/', val) > 0 THEN SUBSTRING(val, CHARINDEX('/', val) + 1, CHARINDEX('/', REVERSE(val)))
ELSE 1 END AS float)
FROM dbo.test12
WHERE CHARINDEX(' ', val) = 0
UNION ALL
SELECT CAST(SUBSTRING(val, 0, CHARINDEX(' ', val)) AS float) +
CAST(SUBSTRING(val, CHARINDEX(' ', val), CHARINDEX('/', val) - CHARINDEX(' ', val)) AS float)/
CAST(SUBSTRING(val, CHARINDEX('/', val) + 1, CHARINDEX('/', REVERSE(val))) AS float)
FROM dbo.test12
WHERE CHARINDEX(' ', val) > 0
這種事情最好是在你的GUI完成:將其放入數據庫,而不是事後才計算表達式。如果您想保留原始用戶輸入,您可以隨時在GUI中插入。評估隨機用戶輸入在任何系統中都是危險的,因此最好解析和/或評估數據庫之外的輸入,以便限制潛在的影響,並且還可以使用更強大(或更少專業化的,如果您願意的話)編程語言比TSQL。
說了這麼多,你可以用動態SQL的東西(假設你的輸入總是在你已經顯示的格式):
declare @input varchar(10)
set @input = '1 1/2'
set @input = replace(@input, ' ', '+')
exec('select cast(' + @input + '.0 as float)')
但具有所有問題of dynamic SQL,包括信任用戶輸入。而且您不能在TSQL函數中使用動態SQL,因此您無法將其方便地包裝以便在查詢中使用。當然,您可以在TSQL過程中使用遊標或編寫CLR函數或存儲過程,但這種任務在數據庫中感覺不合適。順便說一句,this question非常相似。
您正在使用哪些DBMS?甲骨文? PostgreSQL的? DB2? –
MS Sql服務器2008 –
我只是好奇這是什麼動機...和SQL。 – xdazz