Проверьте ограничение на деньги

Днем все,

У меня есть необходимость в Ограничении проверки в одном столбце, который используется для выражения долларов, уплаченных за услугу / продукт.

Я хочу, чтобы это контрольное ограничение проверяло, чтобы убедиться, что нет начальных пробелов (например, LEFT(1)<>''), нет хвостовых пробелов (например, RIGHT(1)<>''), что нет научной нотации, нет запятые, без значений NULL и не более 4 цифр ПОСЛЕ десятичного числа (например, 1234567890.0000)

Любая помощь будет принята с благодарностью!

Спасибо, Хукд

1 ответ

Решение

Большинство вещей, которые вы хотите проверить, могут быть просто предотвращены, если вы сделаете столбец типа деньги вместо того, чтобы иметь его как 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" при создании таблицы перед столбцами. Надеюсь, что это дает вам идею. Вы можете использовать регулярные выражения для предотвращения запятых и научных обозначений. Тем не менее, я бы предпочел использовать правильный тип данных.

Другие вопросы по тегам