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
Edit #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
请注意,我更改了搜索模式以包含负号
和小数点分隔符。我还将转换的数据类型更改为
一个浮标。 Val 返回一个 vb6 double,与 SQL Server 相同
漂浮。 ——G·马斯特罗斯