我们在SQL SERVER for VAL()函数中是否有任何等效的函数 MS Access



我在直接在包含VAL([CoLUMN_NAME])的sql服务器中运行代码访问查询时遇到问题。在谷歌搜索了很多之后,我找到了一种CAST(COLUMN AS DATATYPE)来替换VAL().

但是当该列是文本类型并且如果我们编写VAL([COLUMN_NAME])时,我们只会从该文本中获取数字部分。例如,该列具有此值 45-A45 并VAL([COLUMN_NAME])使用,我们将只得到"4545"。

如果我们想在SQL SERVER中实现这一点,该怎么办?

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

请注意,我更改了搜索模式以包含负号 和小数点分隔符。我还将演员表的数据类型更改为 一个浮子。Val 返回一个 vb6 double,它与 SQL Server 相同 浮。- G.马斯特罗斯

最新更新