Выбор данных определенного значения - PullRequest
0 голосов
/ 06 июля 2011

У меня есть таблица с именем customers, с полем с именем telnumber.

telnumber содержит номер телефона, но содержит некоторые недействительные данные.Поэтому я хочу выбрать данные из таблицы клиентов, поле telnumber, где значение имеет длину от 9 до 11 и является числовым.

Ответы [ 6 ]

4 голосов
/ 06 июля 2011

Это должно возвращать только те записи, которые имеют длину от 9 до 11 И являются числовыми.

SELECT * FROM customers
WHERE LENGTH(telnumber) BETWEEN 9 AND 11
AND telnumber REGEXP '^[0-9]+$'
2 голосов
/ 06 июля 2011

Ваше требование 9 and 11 in length and is numeric означает, что вы автоматически отклоняете любые обычные "знаки препинания телефонных номеров", такие как тире, пробелы и скобки.Ваше поле telnumber может содержать правильно "пунктуированные" номера телефонов.Я думаю, что более полное решение будет использовать MySQL RegEx для проверки на действительные номера телефонов.

Вот еще один ТАК вопрос / ответ , чтобы вы начали и, возможно, подумали об альтернативах.

1 голос
/ 06 июля 2011
SELECT
  * 
FROM customers c
WHERE LENGTH(c.telnumber) BETWEEN 9 AND 11
  AND c.telnumber REGEXP '^[0-9]+$'

ИЛИ

SELECT
   *
FROM customers c
WHERE LENGTH(c.telnumber) >=9 AND LENGTH(c.telnumber) <= 11
   AND c.telnumber REGEXP '^[0-9]+$'
0 голосов
/ 06 июля 2011

Я не эксперт в mySql, но я думаю, что вы можете просто использовать:

SELECT *
FROM customers
WHERE CONVERT(telnumber, INTEGER) IS NOT NULL
AND LENGTH(telnumber) >= 9
AND LENGTH(telnumber) <= 11;
0 голосов
/ 06 июля 2011

Вы можете использовать эту хранимую процедуру, чтобы определить, является ли это числовой тип данных:

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
0 голосов
/ 06 июля 2011

Если мы посмотрим здесь и используем LENGTH (), простой запрос будет выглядеть примерно так:

SELECT * FROM customers WHERE (LENGTH(telnumber) > 9) AND (LENGTH(telnumber) < 11)

Это можно расширить в соответствии с вашими потребностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...