Страница 1 из 1
селект с проверкой года
Добавлено: 16 июн 2009, 11:37
2hands
Доброго времени суток!
подскажите как составить select.
есть таблица, одна из колонок (например, yy1) varchar(4) должна содержать год.
но есть и другая информация. Как выбрать записи из таблицы , в которых yy1 содержит информацию, отличную от года.
Спасибо
Re: селект с проверкой года
Добавлено: 16 июн 2009, 11:42
WildSery
Так и определись, как различить.
Мы-то откуда догадаемся? "2000" - это год или вес машины в килограммах?
Re: селект с проверкой года
Добавлено: 16 июн 2009, 11:59
2hands
WildSery писал(а):Так и определись, как различить.
Мы-то откуда догадаемся? "2000" - это год или вес машины в килограммах?
Это я дальше в программе определяю.
А здесь нужно выбрать записи, у которых
4 цифры в yy1
Re: селект с проверкой года
Добавлено: 16 июн 2009, 12:48
WildSery
2hands писал(а):А здесь нужно выбрать записи, у которых 4 цифры в yy1
Вот, уже половина задачи решена. Попутно наводящий вопрос - "0000" или "9999" - это тоже год?
Re: селект с проверкой года
Добавлено: 16 июн 2009, 13:08
2hands
WildSery писал(а):2hands писал(а):А здесь нужно выбрать записи, у которых 4 цифры в yy1
Вот, уже половина задачи решена. Попутно наводящий вопрос - "0000" или "9999" - это тоже год?
это я проверю программно. главное, чтобы выбирались записи, у которых в этом поле
не цифры.
Re: селект с проверкой года
Добавлено: 16 июн 2009, 13:56
kdv
у которых в этом поле не цифры.
udf типа isDigit.
Re: селект с проверкой года
Добавлено: 16 июн 2009, 14:19
2hands
я то думал мне сейчас выложат
select * from ..... where ....
буду пробовать и читать
спасибо
Re: селект с проверкой года
Добавлено: 16 июн 2009, 16:14
WildSery
Никто думать не хочет. Все хотят готового
Код: Выделить всё
select * from T where yy1 not between '0000' and '9999'
И хотя это подходит только для четырёх цифр, но ведь ты так и не озвучил, что за помойка в этом полу, и какие "года" там могут быть.
Re: селект с проверкой года
Добавлено: 16 июн 2009, 16:37
2hands
все как всегда на стыке модулей разных пользователей.
в одном поле для даты, куда заносится ручками дата.
Но. в соответствии с установками системы, там может быть и "18-3-2001" и "03111999" и куча других вариантов.
А при добавлении в varchar(4) записываются последние символа. ПОэтому там могут быть и разделители (точка, пробел, слэш и пр.)
Поэтому нужно найти такие записи с "ошибками" .
вот и вся помойка.
Re: селект с проверкой года
Добавлено: 16 июн 2009, 19:14
Dimitry Sibiryakov
Код: Выделить всё
select * from T where yy1 containig '.' or yy1 containing '-' or yy1 containing ' ' or yy1 containing '/'
Re: селект с проверкой года
Добавлено: 16 июн 2009, 21:27
WildSery
Код: Выделить всё
...or yy1 containing 'a' or yy1 containing 'b' or yy1 containing ...

Re: селект с проверкой года
Добавлено: 16 июн 2009, 22:32
kdv
я то думал мне сейчас выложат
в SQL проверки строки на "цифра-не цифра" нет, или по крайней мере в FB/IB нет. Поэтому самое простое решение - where isDigit(field) = 1. Дальше уже можно проверять, что это за цифра такая. Но с учетом того, что в этой varchar(4) может быть все что угодно, в том числе и 00, и 0, и 999, что я бы годом не считал, то на мой взгляд проще всего не морочить голову пытаясь навернуть SQL, а сделать все нужные проверки на клиенте. Считал запись, проверил, выдал результат. Все равно придется все записи перебирать.
Re: селект с проверкой года
Добавлено: 17 июн 2009, 13:31
Dimitry Sibiryakov
WildSery писал(а):Код: Выделить всё
...or yy1 containing 'a' or yy1 containing 'b' or yy1 containing ...

И в каких же региональных настройках ты видел a или b в качестве разделителя?..

Re: селект с проверкой года
Добавлено: 17 июн 2009, 14:04
WildSery
Dimitry Sibiryakov писал(а):И в каких же региональных настройках ты видел a или b в качестве разделителя?..

При чём тут разделитель? Автор сказал "заносится ручками".
Re: селект с проверкой года
Добавлено: 24 июн 2009, 09:08
Tonal
2hands писал(а):
в одном поле для даты, куда заносится ручками дата.
Но. в соответствии с установками системы, там может быть и "18-3-2001" и "03111999" и куча других вариантов.
А при добавлении в varchar(4) записываются последние символа. ПОэтому там могут быть и разделители (точка, пробел, слэш и пр.)
Поэтому нужно найти такие записи с "ошибками" .
Не проще ли валидировать данные на клиенде перед тем как что-то в базу писать?
Тогда и помойки не будет.
Ну и для даты применять не varchar(20) а date?
