检查约束金钱

时间:2015-03-18 21:32:45

标签: tsql check-constraints

下午所有,

我需要在单个列上使用Check Constraint来表示为服务/产品支付的美元。

我希望检查这个检查约束以确保没有前导空格(例如LEFT(1)<>''),没有拖尾空格(例如RIGHT(1)<> ;''),没有科学记数法,没有逗号,没有NULL值,并且在小数点后不超过4位数(例如1234567890.0000)

非常感谢任何和所有帮助!

谢谢你, Hukd

1 个答案:

答案 0 :(得分:0)

如果您创建了money类型的列而不是将其作为varchar并允许用户输入所有类型的奇怪数据,那么您想要检查的大部分内容都可以被阻止。您可以使用以下内容来更改列:

Alter table tablename alter column columnname money; -- you can only do this if there is no constraint on it already and there is not data (or the data follows the money type rules)

如果您决定保留varchar,那么检查约束将非常复杂。要检查左,右空格和小数点后的位数,可以使用以下约束:

CONSTRAINT chk CHECK(LEFT([paid], 1) != ' ' AND  RIGHT([paid], 1) != ' '  AND LEN(SUBSTRING([paid], CHARINDEX('.', [paid])+1, LEN([paid]))) !> 4 AND paid like '%[^0-9]%')

可以通过简单地放置" not null"来防止空。在列前面创建表时。希望这会给你一个想法。您可以使用正则表达式来防止逗号和科学记数法。不过,我更喜欢使用正确的数据类型。