我有一个名为customers
的表格,其中有一个名为telnumber
的字段。
telnumber
包含电话号码,但确实有一些无效数据。所以我想从customer表中选择数据,字段telnumber,其值在9到11之间,并且是数字。
答案 0 :(得分:4)
这应仅返回长度介于9和11之间的记录,并且是数字。
SELECT * FROM customers
WHERE LENGTH(telnumber) BETWEEN 9 AND 11
AND telnumber REGEXP '^[0-9]+$'
答案 1 :(得分:2)
您对9 and 11 in length and is numeric
的要求意味着您会自动拒绝任何常见的“电话号码标点符号”,例如破折号,空格和括号。您的telnumber
字段实际上可能包含正确的“标点”电话号码。我认为更完整的解决方案将使用MySQL's RegEx来测试有效的电话号码。
这是另一个SO question/answer,可以帮助您入门,也许可以考虑替代方案。
答案 2 :(得分:1)
SELECT
*
FROM customers c
WHERE LENGTH(c.telnumber) BETWEEN 9 AND 11
AND c.telnumber REGEXP '^[0-9]+$'
OR
SELECT
*
FROM customers c
WHERE LENGTH(c.telnumber) >=9 AND LENGTH(c.telnumber) <= 11
AND c.telnumber REGEXP '^[0-9]+$'
答案 3 :(得分:0)
如果我们看一下here并使用LENGTH(),一个简单的查询将如下所示:
SELECT * FROM customers WHERE (LENGTH(telnumber) > 9) AND (LENGTH(telnumber) < 11
)
可以扩展以满足您的需求。
答案 4 :(得分:0)
您可以使用此存储过程来确定它是否为数字数据类型:
CREATE FUNCTION dbo.IsNumericEx( @value nvarchar(max) )
RETURNS BIT
AS
BEGIN
DECLARE @isInt BIT
SELECT @isInt = 1
WHERE @value NOT LIKE '%[^0-9.-]%'
AND LEN(REPLACE(@value, '.', '')) >= LEN(@value) - 1
AND CHARINDEX('-', @value) IN (0, 1)
AND CHARINDEX('-', @value, 2) = 0
RETURN ISNULL(@isInt, 0)
END
GO
查询:
select * from myTable where isNumericEx(mycolumn) = 1 and length(mycolumn) between 9 and 11
答案 5 :(得分:0)
我不是mySql的专家,但我认为你可以简单地使用:
SELECT *
FROM customers
WHERE CONVERT(telnumber, INTEGER) IS NOT NULL
AND LENGTH(telnumber) >= 9
AND LENGTH(telnumber) <= 11;