Val は文字列の左側にある単なる数字なので、大まかに次のようなものから始めることができます。
SELECT CASE
WHEN Patindex('%[^0-9]%', table_1.atext) > 0 THEN Cast(
LEFT(table_1.atext, Patindex('%[^0-9]%', table_1.atext) - 1) AS INT)
ELSE 0
END AS Val
FROM table_1;
これは「45 ダース」ではなく 45 を返しますが、「45」ではなく 45 を返すように大幅に改善する必要があります。
再コメントを編集
@Andriy Mのソリューション(以下)は、私が知る限り、Valとまったく同じように機能します。
SELECT CAST(LEFT(table_1.atext, Patindex('%[^0-9]%', table_1.atext + 'x') - 1)
AS INT) AS Val from table_1
編集#2
MS Access からの表:
AText Val(Atext)
45 dozen 45
ABC 45 0
45_ABC 45
45 ABC 34 45
45 45
ABC 0
@Andriy M のソリューションを使用すると、まったく同じ結果が得られます。
それ以来、@GMastros の方が優れた解決策があることがわかりました。
CAST(LEFT(atext, Patindex('%[^-.0-9]%', atext + 'x') - 1) AS Float) AS Val
検索パターンを変更して、マイナス記号と小数点記号を含めたことに注意してください。また、キャストのデータ型を float に変更しました。Val は vb6 double を返します。これは、SQL Server float と同じです。-- G.マストロス