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

时间:2016-11-25 06:09:22

标签: sql sql-server sql-server-2008

我有一个带有电话号码列的客户表格,其格式应该类似于“xx-xxxxxxxx”。我们如何实现?

4 个答案:

答案 0 :(得分:2)

您的问题并不清楚您特别想要实现的目标,因此我假设您希望阻止格式错误的数据插入数据库。

您可以使用检查约束阻止格式不正确的数据插入表中。

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')

答案 1 :(得分:0)

WHN PhoneNumber LIKE'[0-9] [0-9] - [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0 -9] [0-9]'然后'正确' ELSE'不正确'

我不确定它是完全正确的,但它应该是这样的

答案 2 :(得分:0)

尝试使用varchar数据类型并使用SQL FORMAT()函数获取电话号码

答案 3 :(得分:0)

尝试以下查询:

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

如果验证为True,则返回电话号码,否则返回' False'。