2014-10-28 3 views
0

Я пытаюсь преобразовать этот оператор в команду SQL - для тестирования и обучения.Базовый синтаксис против команды SQL - Formula Crystal Reports

Код в формуле в основном синтаксисе

if IsNumeric (Mid(Trim(X), 1)) Then 
formula = UCASE(TRIM(MID(X, (INSTR (X, " ", 1) +1))))) 
ELSE 
formula = X. 

Что я должен использовать вместо формулы в SQL команды и это должно быть сделано в SQL команды для повышения эффективности? Даже если я не должен, я хотел бы знать, как написать это в команде sql.

До сих пор я

CASE ISNUMERIC (Mid(Trim(X), 1)) Then 
[BLANK] = UCASE(TRIM(MID(X, (CHARINDEX (X, " ", 1) +1))))) 
ELSE 
[BLANK] = X 

EPV

выборки данных. Поэтому, когда я импортирую/связываю данные с задней стороны. Моя X поле выглядит как разнообразие: 1. 'zzabc123 - красный автомобиль'
2. 'ABC123 - The Black Car' 3. 'Зеленый автомобиль'

Я хочу, чтобы создать код SQL где:

  • ПРОВЕРКА X (zzabc123 - красный автомобиль), чтобы увидеть, если есть zzabc123 в передних
  • если это числовое, то вырезать переднюю часть - с помощью CHARINDEX найти где пространство начинает и захватывает только «красную машину».
  • Если это не является числовым значением, просто зачистить часть DATA
  • END СЛУЧАЙ
  • После этого случая оценки данных и использовать еще один случай, чтобы найти ключевые слова, чтобы использовать обобщенный термин для отчетности.

  • РЕЗУЛЬТАТЫ

  • RED CAR

  • черный автомобиль
  • GREEN CAR

    SELECT *, 
    CASE ISNUMERIC(Mid(Trim(X), 1)) Then 
    UCASE(TRIM(MID(X, (CHARINDEX (X, " ", 1) +1))))) 
    ELSE X 
    END 
    
    CASE WHEN X LIKE '%RED%' 
    THEN 'RED CAR' 
    ELSE X LIKE '%BLACK%; 
    THEN 'BLACK CAR' 
    ELSE X LIKE '%GREEN%' 
    THEN 'GREEN CAR' 
    ELSE XY 
    END 
    
    FROM XTABLE` 
    
+0

Можете ли вы разместить несколько образцов записей и объяснить условия для вашего заявления CASE? Мне кажется, что вы пытаетесь проверить, является ли поле числовым, и если вы хотите выбрать все до положения пробела – AHiggins

+0

Спасибо, я отредактировал мое сообщение с точным примером того, что я пытаюсь выполнить[email protected] –

+0

Выглядит хорошо! Из любопытства всегда будет «пространство пространства» между? – AHiggins

ответ

0

Не зная специфики ваших данных и того, что вы пытаетесь выполнить, почти невозможно точно дать вам образец SQL.

Сказанное здесь представляет собой преобразование большинства ваших функций в их эквиваленты SQL-Server; если вы можете искать такие предметы, как функции SUBSTRING() и CHARINDEX(), а также адаптировать образец, чтобы выполнить все, что требуется вашим требованиям, это должно вас начать.

SELECT 
    CASE 
     WHEN ISNUMERIC(SUBSTRING(LTRIM(RTRIM(X)), 1,1)) = 0 
     THEN UPPER(LTRIM(RTRIM(SUBSTRING(X, CHARINDEX(X, ' ')+1, LEN(X) - CHARINDEX(X, ' '))))) 
     ELSE 'X' 
    END 
FROM MyTable 
+0

Я создал образец, и если он все тот же, этот, пожалуйста, дайте мне знать. –

0

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

CASE 
    WHEN ISNUMERIC (Mid(Trim(X), 1)) THEN 
    UCASE(TRIM(MID(X, (CHARINDEX (X, " ", 1) +1))))) 
    ELSE 
    X 
END