2016-09-19 211 views
0

我有一個varchar列可以是金錢或十進制數據類型。對於每個示例,存儲的樣本值是500 & .02。VARCHAR列包含小數或金額

如何測試以查看它是Money還是小數,如果它是小數在它前面添加前導0,那麼結果將是0.02?

在此先感謝

+0

添加樣本表數據,所以我們可以看到差異。 – jarlh

+0

金錢或小數點有什麼意義?爲什麼不把所有的價值或金錢或十進制(10,2)? – dfundako

+1

如果你有錢,那麼你應該有一個貨幣欄。如果它是空的,那麼它是一個數字,否則它是一筆錢。順便說一句,更好的方法不會使用varchar列。以美分保持整數也是有道理的。 – Voldy

回答

0

下面是如何,你可以將所有數據被一致顯示爲貨幣數據類型。

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 
0

也許這將有助於你:

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

也許這是你在找什麼?它將所有的值都帶在領先的「。」並添加一個「0」。如果您想以不同方式識別您的小數值,可以調整第三行中的搜索模式。

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