Страница 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 ...
:D

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 ...
:D
И в каких же региональных настройках ты видел 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? :)