我可以在查询(不是函数)中将摄氏度转换为farenheit吗?

时间:2016-09-08 13:58:52

标签: sql sql-server regex

在Oracle中,我可以在SQL查询中将摄氏度转换为farenheit,请参阅下文。似乎SQL Server没有完整的正则表达式功能。是否有可能在不进入函数的情况下执行此操作,我目前正在执行此操作? (UNISTR('00B0')是我们使用的学位符号)

要求是将包含[digits]°C的任何字符串转换为具有[new_digits]°F的相同字符串。

SELECT replace(replace(v_text_f,replace(regexp_substr(v_text_f,'\-?    [[:digit:]]+\.?[[:digit:]]*'||UNISTR('\00B0')||'C'),UNISTR('\00B0')||'C'),
   replace(regexp_substr(v_text_f,'\-?[[:digit:]]+\.?[[:digit:]]*'||UNISTR('\00B0')||'C'),UNISTR('\00B0')||'C')*9/5+32||UNISTR('\00B0')||'F'),
   UNISTR('\00B0')||'F'||UNISTR('\00B0')||'C',UNISTR('\00B0') ||'F')
FROM (SELECT '38'||UNISTR('\00B0')||'C' as v_text_f FROM DUAL)

1 个答案:

答案 0 :(得分:1)

尝试这一点,与Oracle代码相比,极其简化的版本:

DECLARE @C nvarchar(10) = '38'+CHAR(0x00B0)+'C' --38°C

SELECT CONVERT(nvarchar(10),CONVERT(int ,LEFT(@C, CHARINDEX(CHAR(0x00B0), @C)-1))*9/5+32)+CHAR(0x00B0)+'F'
--100°F