如何在SQL中对列中数据的格式进行验证

如何在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

我有一个带有电话号码栏的客户表,其格式应为“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 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

如果验证为真,则返回电话号码,否则返回“假”。

检查约束可能会对您有所帮助。谷歌搜索它如何使用它。你也可以在你的应用程序逻辑中检查它,在它进入实际数据库之前。