2017-05-16 3 views
0
SELECT TRIM(BOTH 'a' FROM 'aaaaaaaaaaaaasdfasa'); 

は正常に動作して戻っsdfas が、私は引用符を削除しようとしていますので、私は、私はエラーを取得する TRIM BOTHのTeradataは、単一引用符のために働いていない

SELECT TRIM(BOTH ''' FROM (''2565','5216','5364'') ; 

をやった - クエリ文字列やコメントブロック内で終了します。 .NETアプリケーションが正常にデータを挿入し、問題は問題が.NETアプリケーション内で使用される準備されたSQL文ではありません SELECTUPDATEすなわち時であることを、この

+0

アプリケーションによって挿入された両方の引用符を無視しますFROM( '' '' 2565 ''、 '' 5216 ''、 '' '' 5364 '' ')) ')しかし、これはあなたが実際に必要/望んでいるものではありません。パラメータはどのように正確に見えますか? – dnoeth

+0

私は '' 2565 '、' 5216 '、' 5364 ''または '2565,5216,5364'のいずれかの@Groupパラメータを持っています。WHERE IN節では、(2565,5216,5364)または( '2565'、 '5216'、 '5364')の両方が機能します。問題は引用符を取り除くことです。すべての引用符またはその引用符を取り除くことです。 – SilverFish

+0

問題を解決するのに役立つその他の機能をお勧めします – SilverFish

答えて

0

この答えは想定して行う方法を提案してください。これはまた、WHERE .. INでそのようなロジックを使用するためのデータ正常性チェックが既に行われていることを前提としています。

は、あなたのデータ値があると仮定します

2565,5216,5364 
'2565','5216','5364' 

あなたのアプリケーションがこれらの隠れ家次へ:

'2565,5216,5364' 
''2565','5216','5364'' 

この回答のためのクエリのデザインを容易にするために、私たちがして、SQLの文字列値にこれらを変換することができます追加の一重引用符で値の各一重引用符をエスケープし、それを文字列にするために一重引用符のペアの中に置く。これは私たちに与えます:

'''2565,5216,5364''' 
'''''2565'',''5216'',''5364''''' 

をあなたはこれらのすべての単一引用符を削除したい場合は、空の文字列を持つすべての単一引用符を置き換える意味し、私たちに与え

SELECT OREPLACE('''2565,5216,5364''', '''', ''); 
SELECT OREPLACE('''''2565'',''5216'',''5364''''', '''', ''); 

を使用することができます。

2565,5216,5364 
2565,5216,5364 

これは、整数値と比較する場合に使用する方法です。

データを保存し、.NETアプリケーションで囲まれた引用符のみを削除する場合(たとえば、比較が文字データでもある場合)、これをさらにロジックと組み合わせることができます。それは、クエリは、上記のアプリケーションから囲む引用符を削除しているあなたに次のような結果が得られます

SELECT TRIM(BOTH '''' FROM '''''2565'',''5216'',''5364'''''); 

、このような動作のためのより多くの価値を提示するだけでなく、が入力した最初と最後の引用符を削除しますので、私たちは、第二のデータ値を使用してみましょうユーザー

2565','5216','5364 

良いオプションが、常にあなたのアプリケーションは引用符内のデータが

SELECT SUBSTR('''''2565'',''5216'',''5364''''',2,CHARACTER_LENGTH('''''2565'',''5216'',''5364''''')-2); 
だろう囲むことを前提と(どちら* SELECTトリム:0

これは、長さ2までの文字列の2番目の文字から部分文字列操作を行いますので、あなたは、文字列内の単一引用符を二重にする必要があり

'2565','5216','5364' 
関連する問題