我正在尝试创建一个检查约束,以确保存储的varchar具有至少1个字母和1个数字,并且我不确定如何执行此操作。任何帮助将不胜感激。
这是我到目前为止所做的:
CHECK (VALUE LIKE [a-z] AND LIKE [0-9])
这会有用吗?
感谢。
答案 0 :(得分:2)
该语法无效,因此无法正常工作。至少您需要引用LIKE
表达式中的模式值。他们还必须有通配符,所以他们没有锚定;此刻,您的表达式试图说“值必须是单个字符,这是一个字母,而单个字符是一个数字”。这是不可能的。此外,您无法在([...])
中使用字符类LIKE
。
你想要的是使用一对简单的正则表达式。这样:
CHECK (thevalue ~ '[[:alpha:]]' AND thevalue ~ '\d')`
会做的。
你可以用表达式玩一些简单的游戏来强迫它成为一个正则表达式,但我认为没有多大意义,它只会更难以阅读和丑陋。
所有这一切,我担心您可能会尝试验证密码强度。如果你这样做那么这绝对是错误的方法。 不使用CHECK
约束 - 在所有现有行都通过约束之前,您将无法引入更强的要求。在您的应用程序中将检查作为输入验证,并使用正确的密码强度检查工具 - 已经存在 - 而不是自己滚动。
答案 1 :(得分:0)