VARCHAR列包含十进制或货币

时间:2016-09-19 13:40:56

标签: sql

我有一个varchar列,可以是money或decimal数据类型。存储的样本值为500& .02为每个例子。

如何测试是否为Money或小数,如果是小数,则在前面添加前导0,结果为0.02?

提前致谢

3 个答案:

答案 0 :(得分:0)

以下是将所有数据转换为一致显示为Money数据类型的方法。

DECLARE @BadDesign TABLE (
    BadDataTyping VARCHAR(100)
)

INSERT INTO @BadDesign (BadDataTyping) VALUES ('500')
INSERT INTO @BadDesign (BadDataTyping) VALUES ('.02')

SELECT * FROM @BadDesign
SELECT CONVERT(MONEY,BadDataTyping) FROM @BadDesign

UPDATE @BadDesign
SET BadDataTyping=CONVERT(MONEY,BadDataTyping)

SELECT * FROM @BadDesign

答案 1 :(得分:0)

也许这会对你有所帮助:

SELECT REPLACE(REPLACE('500 & .02','&',''),' ','')::DECIMAL(15,2);  -- result: 500.02 (decimal)

答案 2 :(得分:0)

也许这就是你要找的东西?它需要带有前导“。”的所有值。并添加“0”。如果你想以不同的方式识别你的十进制值,可以调整第三行中的搜索模式。

SELECT 
  CASE TRUE 
    WHEN LEFT( col1, 1 ) =  "." THEN CONCAT('0', col1 ) 
    ELSE col1
  END AS col1_formatted
FROM tab1