#sql #sql-server #tsql #string #string-parsing
#sql #sql-сервер #tsql #строка #синтаксический анализ строк
Вопрос:
У меня есть столбец в таблице со значениями, хранящимися как
Cost
499.00
£ 7.75
£ 7.75
250.00
£ 5.99
$ 6.05
Теперь мне нужно сохранить эти значения в другой таблице, например
Currency Cost
RS 499.00
£ 7.75
£ 7.75
RS 250.00
£ 5.99
$ 6.05
Пожалуйста, дайте мне запрос, как это сделать….
Ответ №1:
insert DestinationTable(Cost, Currency)
select
case when delimiterIndex > 0 then left(Cost, delimiterIndex) else 'RS' end as Currency,
right(Cost, len(Cost) - delimiterIndex) as Cost
from
(
select charindex(' ', Cost) delimiterIndex, *
from SourceTable
) tt
Комментарии:
1. Вероятно, вы хотите добавить регистр для преобразования no currrency в ‘RS’
2. Я следил за вашими ответами в течение последней недели. Действительно полезно. Хотелось бы узнать от вас намного больше.
Ответ №2:
Я бы использовал Perl для этого…
#!/usr/bin/perl
use strict;
use warnings;
open(FH,"<data.txt");
my @lines=<FH>;
print "Currency"."t"."Costn";
foreach my $line (@lines){
$line=~s/n//g;
if($line ne ""){
my @split1=split(/s /,$line);
if($split1[0]=~m/[0-9.]/){
print "t".$split1[0]."n";
}else{
print $split1[0]."t".$split1[1]."n";
}
}
}
Ответ №3:
Вы можете использовать строковые функции SQL-Сервера:
# Currency
SELECT SUBSTRING(<value>, 1, CHARINDEX(' ', <value>))
# Amount
SELECT SUBSTRING(<value>, CHARINDEX(' ', <value>), LEN(<value>))
Ответ №4:
Вы могли бы создать сборку regex CLR, подобную этой one, и указать в своем запросе, чему соответствовать.
Возможно, потребуется немного больше работы, чем в других предложениях, но вы могли бы повторно использовать сборку в другом месте, если она вам понадобится.
Ответ №5:
SELECT
Currency = COALESCE(NULLIF(LEFT(Cost, CostStart - 1), ''), 'RS'),
Cost = SUBSTRING(Cost, CostStart, LEN(Cost) - CostStart 1)
FROM (
SELECT
Cost,
CostStart = PATINDEX('%[0-9]%', Cost)
FROM atable
) s
Это будет работать, даже если между символом валюты и суммой нет пробела.
Ответ №6:
Строковый буфер alpha = новый строковый буфер (), num = новый строковый буфер (), special = новый строковый буфер ();
final String txt= txtview2.getText().toString();
alpha1.setText(txtview2.getText().toString());
num1.setText(txtview2.getText().toString());
special1.setText(txtview2.getText().toString());
Toast.makeText(MainActivity.this,"you enter string:" txt,Toast.LENGTH_SHORT).show();
for (int i=0; i<txt.length(); i )
{
if (Character.isDigit(txt.charAt(i)))
num.append(txt.charAt(i));
else if(Character.isLetter(txt.charAt(i)))
alpha.append(txt.charAt(i));
else
special.append(txt.charAt(i));
}
alpha1.setText("The Character: " alpha);
num1.setText("The digit:" num);
special1.setText("The special symbol: " special);
}