我有一个包含字段的表:
doses_given decimal(9,2)
我想在这个领域成倍增加:
drug_units_per_dose varchar(255)
所以我做了这样的事情:
CAST(ppr.drug_units_per_dose as decimal(9,2)) * doses_given dosesGiven,
然而,看看数据,我注意到一些奇怪的字符:
select distinct(drug_units_per_dose) from patient_prescr
NULL
1
1-2
1-4
1.5
1/2
1/4
10
12
15
1½
2
2-3
2.5
20
2½
3
3-4
30
4
5
6
7
8
½
正如您所看到的,我得到的一些字符不能是CAST
到十进制。在网页上,这些字段被解释为一个小1/2
符号:
是否有用.5替换½
字段以准确完成乘法?
答案 0 :(得分:2)
1/2符号是ascii字符189,所以要替换:
CAST(REPLACE(ppr.drug_units_per_dose,char(189),'.5') as decimal(9,2)) * doses_given dosesGiven
答案 1 :(得分:1)
你有一个相当讨厌的问题。你有一个正常人认为是整数或浮点数的字段drug_units_per_dose
。显然,您的数据库的设计者是超常规的人,他们理解这个概念的更广泛的选择。
我说部分舌头在脸颊,但要说明重点。数据库中的列不代表数字,至少在所有情况下都不代表。我建议你有drug_units_per_dose
的翻译表。它将包含如下列:
1 1
1/2 0.5
3-4 ??
我意识到你会有数百行,而且很多行看起来都是多余的,因为它们将是" 50,50"和" 100,100"。但是,如果您希望控制业务逻辑以将这些字符串转换为数字,那么查找表似乎是最安全的方法。