3

SQL Server 2008 では、データベース内の一連の項目番号から最後の 2 文字を削除する必要があります。すべての数値が同じ形式であるとは限らず、特定の数値から文字を削除するだけで済みます。切り捨てる必要がある数字は、この DOR-12345_X のようになります。ここで、_X はリビジョン文字です。私はこれを試しました

 SELECT LEFT(IV00103.VNDITNUM,(LEN(IV00103.VNDITNUM)-2) 
 FROM IV00103 
 WHERE LEFT STR = 'DOR'

しかし、近くの構文FROMSTR = 'DOR'

誰でも手伝ってもらえますか? さらに情報が必要ですか? 私は本当に SQL の初心者です =) ありがとうございます!

-ジョン

4

2 に答える 2

4

正しい構文は次のとおりだと思います。

 SELECT LEFT(IV00103.VNDITNUM, LEN(IV00103.VNDITNUM)-2) 
 FROM IV00103 
 WHERE LEFT(IV00103.VNDITNUM, 3) = 'DOR'

または:

WHERE IV00103.VNDITNUM like 'DOR%'
于 2013-10-29T14:24:48.973 に答える
1

FROMの閉じ括弧が欠落しているため、構文 near は好きではありませんLEFT。あなたが望むのは次のようなものだと思います:

SELECT CASE WHEN IV00103.VNDITNUM LIKE 'DOR%' THEN LEFT(IV00103.VNDITNUM,(LEN(IV00103.VNDITNUM)-2)) ELSE IV00103.VNDITNUM END AS VNDITNUM
FROM IV00103 

これにより、IV00103 テーブルから絶対にすべてが選択され、VNDITNUM列の値が で始まる最後の 2 文字のみが削除されDORます。

編集: テーブルの内容を実際に更新したい場合は、WHERE を使用してこの方法で行うことができます:

UPDATE IV00103
SET VNDITNUM = LEFT(IV00103.VNDITNUM,(LEN(IV00103.VNDITNUM)-2))
WHERE VNDITNUM LIKE 'DOR%'

パターンに一致するものだけが必要な場合は、DOR-somecharacters_asinglecharacterおそらく次のようにする必要があります。

UPDATE IV00103
SET VNDITNUM = LEFT(IV00103.VNDITNUM,(LEN(IV00103.VNDITNUM)-2))
WHERE VNDITNUM LIKE 'DOR-%\__' ESCAPE '\'

これはエスケープされたアンダースコアであり、実際の\_アンダースコアとして扱われます。この部分は、文字がパターン内の特殊文字をエスケープするために使用されていることを SQL に伝えます。2 番目は特殊文字で、1 文字に一致します。ESCAPE '\'\_

于 2013-10-29T14:25:05.010 に答える