2014-01-02 5 views
0

Из таблицы нижеподстроки в SQL Server 2008

date    description         amount 
    29/12/13  <13363000054123>JIT BAHADUR LAMICHHANE  CR 10,000.00 TBI 29/12/13 29/12/13 
    29/12/13  <13363740800138>MAN BAHADUR .    CR 1,19,595.00 TBI 29/12/13 29/12/13 
    29/12/13  <555349302906>CHANDRA PRASAD DAHAL   CR 24,054.30 TBI 29/12/13 29/12/13 
    29/12/13  <13362144250203>BISHNU GURUNG DHAN   CR 1,30,562.00 TBI 29/12/13 29/12/13 

мне нужны записи, как показано ниже

date    description   amount 
29/12/13  <13363000054123> CR 10,000.00 
29/12/13  <13363740800138> CR 1,19,595.00 

Я попытался подстроку, но размер строки не может быть установлена ​​на колонке «сумма». Каков наилучший способ?

+1

Извините, на каком этапе вы фильтруете строки? –

ответ

1

Попробуйте сочетание CHARINDEX и SUBSTRING. Предполагаемая сумма имеет формат «xxx.xx»

SELECT date, 
     LEFT(description, Charindex ('>', description)), 
     LEFT(amount, Charindex ('.', amount)) 
     + Substring(amount, Charindex ('.', amt)+1, 2) 
FROM tbl 
0

Вы можете использовать this function, чтобы разделить сумму. Но ваша схема совершенно неверна, вы должны работать над ней, чтобы избежать проблем, связанных с тезисами.

+1

Хотя я согласен, что схема в лучшем случае сомнительна, какова ценность для OP (или людей, которые находят этот ответ позже из поиска), говоря, что это совершенно неправильно, но не объясняет, почему или давая пример того, как это сделать лучше? – Tim

+0

Вы правы. Я думал о нормализации схемы: [link] http://en.wikipedia.org/wiki/Database_normalization Реальная сумма должна быть одна в столбце ('10 000.00 'вместо' CR 10 000,00 ' например) –

2

Это информация, которую вы указали.

Declare @S varchar(50) 
Declare @T varchar(50) 
Select @S = '<13363000054123>JIT BAHADUR LAMICHHANE', @T = 'CR 10,000.00 TBI 29/12/13 29/12/13' 
Select SUBSTRING(@S, 1, PATINDEX('%>%', @S)), SUBSTRING(@T, 1, PATINDEX('% TBI%', @T)) 

Используйте это в запросе

Select date, SUBSTRING(description, 1, PATINDEX('%>%', description)), SUBSTRING(amount, 1, PATINDEX('% TBI%', amount)) 
+0

TBI не исправлен, он может иметь abc, xyz ничего –

+0

+1 для patidex ... – sumit

0

попробуйте это описание колонка.

SELECT 
    date, 
    SUBSTRING(description, 0,charindex('>',description)+1) as description  
from  
    @table