微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用char

如何解决使用char

我当前正在使用sqlite Studio,并且无法在char类型的列上添加检查约束。该列是长度为5的字符的唯一代码的列表。我希望检查约束在代码中的任何位置都不包括字母S,I和Z。这是我到目前为止编写的代码

CHECK(length(VIN)= 5)AND substr(VIN,1,5)NOT IN('S','I','Z')

上面的代码什么都不做,字母仍然可以包含在代码中,所以我决定做相反的事情,虽然时间更长一点。

(length(VIN)= 5)AND substr(VIN,1,5)IN('A','B','C','D','E','F','G', 'H','J','K','L','M','N','O','P','Q','R','T','U','V ','W','X','Y')

在上面的代码中,检查约束起作用,但是约束不允许插入5个长度的代码在这个问题上的任何帮助将是巨大的。预先感谢

解决方法

substr(VIN,1,5) NOT IN ('S','I','Z')将始终为true,因为您正在检查5个字符长的字符串是否不等于1个字符长的字符串,这种情况总是如此。您需要GLOB匹配项:

sqlite> CREATE TABLE example(vin TEXT CHECK (length(vin) = 5 AND vin NOT GLOB '*[sSiIzZ]*'));
sqlite> INSERT INTO example(vin) VALUES ('aaaaaa'); -- Too long
Error: CHECK constraint failed: example
sqlite> INSERT INTO example(vin) VALUES ('aaaaa'); -- Just right
sqlite> INSERT INTO example(vin) VALUES ('aaaza'); -- Forbidden character
Error: CHECK constraint failed: example

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。