列から最大のDecimal値を取得し、次の値を取得するために1を加算しようとしています。しかし、列の値はvarchar型です。つまり、 '123a'のような値を避けながら、 '123a'のような値をキャストしようとします。10進数にキャストされた最大varcharの選択
私がこれまでに試したことは何ですか例えば100は、ID列に存在する値のような9及び値は、MAXは、私が「100
上9を優先する場合は、私は、これを実行すると、しかし
SELECT
(CAST(MAX(Id) AS DECIMAL(38,0)) + 1) AS 'New ID'
FROM database
WHERE Id NOT LIKE '%[^0-9]%' --filters out non-numeric ID values
AND (LEN(Id) + 1) < 39 --ensures ID is less than length 39
:本でありますまた試みました:
SELECT
(CAST(MAX(CAST(Id AS DECIMAL(38,0))) AS DECIMAL(38,0)) + 1) AS 'New ID'
FROM database
WHERE Id NOT LIKE '%[^0-9]%'
AND (LEN(Id) + 1) < 39
しかし、これは、varcharを数値に変換する際にエラーになります。なぜなら、WHERE句で数値以外のIDをフィルタリングする前に10進数としてキャストしようとしていると仮定しているからです。私はまた、最初に余分なキャストを取り除こうとしましたが、それでも同じ問題があります。
ありがとうございました!
キャストが最大値の前に発生するように順序を切り替えます。 'MAX(CAST(Id AS DECIMAL(38,0))+ 1)AS 'New ID''またはそのようなもの..またはCTEを使用して最初に非数値IDを削除し、次にキャストして最大+1を取得してください – xQbert