选择某个值的数据

时间:2011-07-05 21:57:27

标签: mysql sql

我有一个名为customers的表格,其中有一个名为telnumber的字段。

telnumber包含电话号码,但确实有一些无效数据。所以我想从customer表中选择数据,字段telnumber,其值在9到11之间,并且是数字。

6 个答案:

答案 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;