Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
UPDATE zayavlenie_tmp
SET error = 1,
errorcod = 4
FROM zayavlenie_tmp
WHERE zayavlenie_tmp.error IS NULL
AND (rtrim(fam) = ''
OR LEN(ltrim(rtrim(fam))) < 2
OR fam LIKE '%0%'
OR fam LIKE '%1%'
OR fam LIKE '%2%'
OR fam LIKE '%3%'
OR fam LIKE '%4%'
OR fam LIKE '%5%'
OR fam LIKE '%6%'
OR fam LIKE '%7%'
OR fam LIKE '%8%'
OR fam LIKE '%9%'
UPDATE zayavlenie_tmp
SET error = 1,
errorcod = 5
FROM zayavlenie_tmp
WHERE zayavlenie_tmp.error IS NULL
AND (rtrim(im) = ''
OR LEN(ltrim(rtrim(im))) < 2
OR im LIKE '%0%'
OR im LIKE '%1%'
OR im LIKE '%2%'
OR im LIKE '%3%'
OR im LIKE '%4%'
OR im LIKE '%5%'
OR im LIKE '%6%'
OR im LIKE '%7%'
OR im LIKE '%8%'
OR im LIKE '%9%'
При импорте поля проверяются на соответствие (около 30 разнобразных правил). Хранимику писал мой начальнег :) Выкладываю УЖЕ немного исправленный для удобопонимания вариант, в исходнике таблицы еще зачем-то джойнились сами на себя. Всего в хранимике 50 (!!!) таких запросов, и каждый не менее эпичный )) Хотел исправить это хозяйство одним более-менее цивильным запросом, но где-то на половине у меня руки опустились
А фамилии с пробелами посредине разрешены?
А еще вопрос, ради себя интересуюсь, для расширения кругозора, ваш вариант запроса, у меня есть собственные предположения, но хотел посмотреть как правильно
Конкретно в нашем случае проверки эффективней делать в этой таблице - она временная, там то что импортируем из файла. После проверок записи без ошибок перемещаются в основную таблицу.
На счет пробела в центре я даже не заметил)) Да, их тоже быть не должно 😀
Your father fucked your mother. At least once, your father and your mother were in bed, and your father got a hard-on, and he stuck it inside your mother and they fucked. Sometimes maybe your father fucked your mother in the ass, and maybe on the night that you were... http://tomsk.fm/watch/164947
Что думаете на счет этого варианта? Это я начал так переделывать, может и я наклал так-то?! 🙂
UPDATE zayavlenie_tmp
SET errorcod = CASE
WHEN ltrim(rtrim(fam)) LIKE '%[0-9]%' OR LEN(ltrim(rtrim(fam))) < 2 THEN 5
WHEN ltrim(rtrim(im)) LIKE '%[0-9]%' OR LEN(ltrim(rtrim(im))) < 2 THEN 4 ELSE NULL END;
update zayavlenie_tmp
set error = 1 where errorkod is not null;
*результат этих запросов может отличаться - там присвоит первый код ошибки тут последний , но не суть важно в моем случае. и повторюсь там ~50 таких проверок еще
UPDATE zayavlenie_tmp
SET error = 1,
errorcod = 4
FROM zayavlenie_tmp
LEFT OUTER JOIN
(SELECT id
FROM zayavlenie_tmp
WHERE zayavlenie_tmp.flk IS NULL
AND (rtrim(fam) = ''
OR LEN(ltrim(rtrim(fam))) < 2
OR fam LIKE '%0%'
OR fam LIKE '%1%'
OR fam LIKE '%2%'
OR fam LIKE '%3%'
OR fam LIKE '%4%'
OR fam LIKE '%5%'
OR fam LIKE '%6%'
OR fam LIKE '%7%'
OR fam LIKE '%8%'
OR fam LIKE '%9%')) AS flk
ON zayavlenie_tmp.id = flk.id
WHERE flk.id IS NOT NULL;
Вот исходный вариант (второй запрос аналогично). Сейчас опять читаю и не могу вкурить зачем там этот джойн
А еще вопрос, ради себя интересуюсь, для расширения кругозора, ваш вариант запроса, у меня есть собственные предположения, но хотел посмотреть как правильно
такие вообще бывают?
На счет пробела в центре я даже не заметил)) Да, их тоже быть не должно 😀
Напомнило:
and i'm like baby, baby, baby, oohhh
http://tomsk.fm/watch/164947
UPDATE zayavlenie_tmp
SET errorcod = CASE
WHEN ltrim(rtrim(fam)) LIKE '%[0-9]%' OR LEN(ltrim(rtrim(fam))) < 2 THEN 5
WHEN ltrim(rtrim(im)) LIKE '%[0-9]%' OR LEN(ltrim(rtrim(im))) < 2 THEN 4 ELSE NULL END;
update zayavlenie_tmp
set error = 1 where errorkod is not null;
*результат этих запросов может отличаться - там присвоит первый код ошибки тут последний , но не суть важно в моем случае. и повторюсь там ~50 таких проверок еще
SET error = 1,
errorcod = 4
FROM zayavlenie_tmp
LEFT OUTER JOIN
(SELECT id
FROM zayavlenie_tmp
WHERE zayavlenie_tmp.flk IS NULL
AND (rtrim(fam) = ''
OR LEN(ltrim(rtrim(fam))) < 2
OR fam LIKE '%0%'
OR fam LIKE '%1%'
OR fam LIKE '%2%'
OR fam LIKE '%3%'
OR fam LIKE '%4%'
OR fam LIKE '%5%'
OR fam LIKE '%6%'
OR fam LIKE '%7%'
OR fam LIKE '%8%'
OR fam LIKE '%9%')) AS flk
ON zayavlenie_tmp.id = flk.id
WHERE flk.id IS NOT NULL;
Вот исходный вариант (второй запрос аналогично). Сейчас опять читаю и не могу вкурить зачем там этот джойн
>error
>cod
>>>!!!РЫБНАЯ ОШИБКА!!!<<<
Почему не нанять программиста, и пускай у него голова болит