2013-05-31 2 views
0

Я хотел написать запрос t-sql, который находит значения в столбце таблицы сервера sql.Искать текст в столбце Varchar (max) сервера Sql

Пример,

CREATE TABLE Transactions (Details varchar(max)); 

Детали Колонка имеет ниже строки типа хранимых в нем

ID=124|NAME=JohnDoe|DATE=020620121025|ISPRIMARY=True| 
TRANSACTION_AMOUNT=124.36|DISCOUNT_AMOUNT=10.00|STATE=GA| 
ADDR1=test|ADDR2=test22|OTHER=OtherDetailsHere 

ID=6257|NAME=michael|DATE=050320111255|ISPRIMARY=False| 
TRANSACTION_AMOUNT=4235.00|DISCOUNT_AMOUNT=33.25|STATE=VA| 
ADDR1=test11|ADDR2=test5|OTHER=SomeOtherDetailsHere 

Объектив написать запрос, который дает ниже выхода

Name  | Transaction Amount | Discount 
------------------------------------------- 
JohnDoe | 124.36    | 10.00 
michael | 4235.00   | 33.25 

Любая помощь будет высоко оценили.

Спасибо,

Джо

ответ

3

Почему вы храните трубы данных с разделителями в одном столбце - эти поля должны быть добавлены в виде столбцов в таблице.

Однако, если это не вариант, вам нужно будет использовать строковые манипуляции. Вот один вариант с помощью пару Общих табличных выражений, наряду с SUBSTRING и CHARINDEX:

WITH CTE1 AS (
    SELECT 
     SUBSTRING(Details, 
      CHARINDEX('|NAME=', DETAILS) + LEN('|NAME='), 
      LEN(Details)) NAME, 
     SUBSTRING(Details, 
      CHARINDEX('|TRANSACTION_AMOUNT=', DETAILS) + LEN('|TRANSACTION_AMOUNT='), 
      LEN(Details)) TRANSACTION_AMOUNT, 
     SUBSTRING(Details, 
      CHARINDEX('|DISCOUNT_AMOUNT=', DETAILS) + LEN('|DISCOUNT_AMOUNT='), 
      LEN(Details)) DISCOUNT_AMOUNT 
    FROM Transactions 
), CTE2 AS (
    SELECT 
     SUBSTRING(NAME,1,CHARINDEX('|',NAME)-1) NAME, 
     SUBSTRING(TRANSACTION_AMOUNT,1,CHARINDEX('|',TRANSACTION_AMOUNT)-1) TRANSACTION_AMOUNT, 
     SUBSTRING(DISCOUNT_AMOUNT,1,CHARINDEX('|',DISCOUNT_AMOUNT)-1) DISCOUNT_AMOUNT 
    FROM CTE1 
) 
SELECT * 
FROM CTE2 
+0

Hi @sgeddes, Ваш ответ решает проблему, упомянутую в тестовом сценарии, однако при реализации же решения с реальными данными, он не работает, не в состоянии определить, что может быть причиной. Не могли бы вы видеть, что корм с реальными данными здесь, в [link] (http://sqlfiddle.com/#!3/dea4e/1) Спасибо – Joe

+0

Nope , Это была моя ошибка ... Ваше решение работает ... Вы сделали мой день! Большое спасибо :-) – Joe

 Смежные вопросы

  • Нет связанных вопросов^_^