Проблема с использованием функции COALESCE в SQL - PullRequest
0 голосов
/ 13 февраля 2012

Я пытаюсь сделать следующее:

SELECT forename, 
       forename2, 
       surname,
       (SELECT (COALESCE(LEFT(forename, 2)),"") + 
               (COALESCE(LEFT(forename2, 1)),"") + 
               (COALESCE(LEFT(surname, 1)), "") as Mnemonic)
from Persons

пытается получить первые 2 буквы имени, первую букву имени2 (если НЕ ноль) и первую букву фамилии, если не ноль, с "" пустыми строками, где присутствует ноль.

любая помощь будет высоко ценится, С уважением, Bserk * ​​1006 *

Ответы [ 4 ]

5 голосов
/ 13 февраля 2012

Ваш вопрос не говорит о том, что не так с вашим текущим кодом, но я предполагаю, что вы получаете ошибку, потому что вы используете двойные кавычки вместо одинарных кавычек, а ваши скобки не совпадают.

Вы также можете несколько упростить этот запрос, удалив внутреннее выделение.

Попробуйте это:

SELECT forename, forename2, surname, 
    COALESCE(LEFT(forename,  2),'') + 
    COALESCE(LEFT(forename2, 1),'') + 
    COALESCE(LEFT(surname,   1),'') as Mnemonic
from Persons
2 голосов
/ 13 февраля 2012

Используйте одинарные кавычки вместо двойных для строковых литералов и считайте свои фигурные скобки:

SELECT 
  forename, 
  forename2, 
  surname,
  COALESCE(LEFT(forename, 2),'') + COALESCE(LEFT(forename2, 1),'') + COALESCE(LEFT(surname, 1), '') as Mnemonic
from Persons
1 голос
/ 13 февраля 2012

Похоже, "проблема", о которой вы упомянули, связана с использованием неправильных скобок и двойных кавычек.

Следующий запрос возвращает 1123

SELECT   COALESCE(LEFT(null, 2), '')  
         + COALESCE(LEFT('1111', 2), '') 
         + COALESCE(LEFT('2222', 1),'') 
         + COALESCE(LEFT('3333', 1), '')
0 голосов
/ 13 февраля 2012

Оператор даже не будет скомпилирован как есть.

  • Вам не нужен второй оператор SELECT, поскольку вы не выполняете подзапрос.
  • Вам нужно использовать одинарные скобки. Двойные скобки используются для имен объектов (т. Е. Таблиц, процедур и т. Д.).
  • Слишком много скобок

Попробуйте:

SELECT forename, forename2, surname,
    COALESCE(LEFT(forename, 2),'') +
    COALESCE(LEFT(forename2, 1),'') + 
    COALESCE(LEFT(surname, 1), '') as Mnemonic
from Persons
...