Я сказал бы, что это - индикатор дефектной структуры таблицы. Возможно, различные типы местоположения должны быть разделены в различных таблицах, позволив Вам сделать намного более богатые запросы и также постараться не иметь лишние столбцы вокруг.
, Если Вы неспособны изменить структуру, что-то как ниже могло бы работать:
SELECT
*
FROM
Test
WHERE
Account_Location = (
CASE LocationType
WHEN 'location' THEN @locationID
ELSE Account_Location
END
)
AND
Account_Location_Area = (
CASE LocationType
WHEN 'area' THEN @locationID
ELSE Account_Location_Area
END
)
И т.д... Мы не можем изменить структуру запроса на лету, но мы можем переопределить его, заставив предикаты равняться себе.
РЕДАКТИРОВАНИЕ: вышеупомянутые предложения, конечно, намного лучше, просто игнорируют мой.
В OSX sed
по умолчанию использует базовые RE. Вы должны использовать sed -E
, если хотите использовать современные RE, включая один или несколько операторов "+"
.
См. здесь для указание на то, что sed
по умолчанию использует базовые RE, здесь для современного синтаксиса RE и здесь для базового RE ( ed
) информации.
В качестве альтернативы, если у вас есть механизм регулярных выражений, который не вообще поддерживает +
, вы можете просто использовать вместо него *
, преобразовав (например):
[a-z]+
в:
[a-z][a-z]*
Устаревшие базовые регулярные выражения не поддерживают кванторы +
и ?
. Это обычные символы.
Альтернативы для [0-9] +
, например, [0-9] {1,}
или [0-9] [0 -9] *
.
Или вы можете использовать sed -E
, чтобы использовать современные расширенные регулярные выражения.
Если + не работает, вы всегда можете использовать {1,}
вы можете использовать awk
# echo 1234abcd| awk '{gsub(/[0-9]+/,"#")}1'
#abcd
# echo abcd| awk '{gsub(/[0-9]+/,"#")}1'
abcd
Многие из утилит UNIX OS X имеют версии, в которых отсутствуют удобства их эквивалентов GNU. Как говорит Pax, вы можете использовать -E:
drigz@mbp drigz 0$ echo 1234abcd | /usr/bin/sed "s/[0-9]\+/#/g"
1234abcd
drigz@mbp drigz 0$ echo 1234abcd | /usr/bin/sed -E "s/[0-9]+/#/g"
#abcd
Обратите внимание, что требуются небольшие изменения синтаксиса вашего регулярного выражения (в данном случае с \ + на +).
Однако я предпочитаю использовать fink для получения утилит GNU:
drigz@mbp drigz 0$ echo 1234abcd | /sw/bin/sed "s/[0-9]\+/#/g"
#abcd
drigz@mbp drigz 0$ /sw/bin/sed --version
GNU sed version 4.1.5
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.