如何在SQL中对列中数据的格式进行验证
我有一个带有电话号码栏的客户表,其格式应为“xx-xxxxxxxx”。我们如何实现?当电话号码如“[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]”时,然后“更正” 否则“不正确”如何在SQL中对列中数据的格式进行验证,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个带有电话号码栏的客户表,其格式应为“xx-xxxxxxxx”。我们如何实现?当电话号码如“[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]”时,然后“更正” 否则“不正确” 我不确定它是否完全正确,但应该是这样的尝试使用varchar datatype并使用SQL FORMAT()函数获取电话号码您的问题不清楚您具体想要实现什么,所以我假设您想要阻止格式不正确的数据插入数据库 您可以使用检查约束阻止格式不良的数据插入到表中 CREATE TABL
我不确定它是否完全正确,但应该是这样的尝试使用varchar datatype并使用SQL FORMAT()函数获取电话号码您的问题不清楚您具体想要实现什么,所以我假设您想要阻止格式不正确的数据插入数据库 您可以使用检查约束阻止格式不良的数据插入到表中
CREATE TABLE Customer (
name VARCHAR(255),
phoneNumber VARCHAR(255),
CONSTRAINT CHK_PhoneNumber CHECK (phoneNumber LIKE '[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
)
-- Succeeds
INSERT INTO Customer(name, phoneNumber) VALUES ('Bob', '12-34567890')
-- Fails
INSERT INTO Customer(name, phoneNumber) VALUES ('Anne', '123-4567890')
-- Fails
INSERT INTO Customer(name, phoneNumber) VALUES ('Tom', 'AB-34567890')
请尝试以下查询:
declare @phno varchar(100)='91-11111111' // enter any number here
select CASE WHEN (
charindex('-',@phno) > 0
AND
len(left(@phno,(charindex('-',@phno)-1))) = 2
// check if only two digits before '-'
AND
ISNUMERIC(right(@phno,(charindex('-',@phno)))) > 0
// check if only numbers after '-'
) THEN @phno ELSE 'FALSE'
END as properWord
如果验证为真,则返回电话号码,否则返回“假”。
检查约束可能会对您有所帮助。谷歌搜索它如何使用它。你也可以在你的应用程序逻辑中检查它,在它进入实际数据库之前。