难道我们在SQL Server中的任何同等功能的MS Access的VAL()函数?(Do we h

2019-08-07 22:48发布

我有在直接在SQL Server中运行的代码访问查询包含一个问题VAL([CoLUMN_NAME]) 很多谷歌搜索后,我发现一个CAST(COLUMN AS DATATYPE)以取代VAL()

但是当该列是文本类型,如果我们写VAL([COLUMN_NAME])我们只获得了数部分从该文本。 对于实施例列具有此值45-A45和使用VAL([COLUMN_NAME])我们将得到唯一的“4545”。

如果我们想在SQL Server中实现这一目标怎么办?

Answer 1:

瓦尔只是数字的字符串的左边,所以你可以使用的东西开始很不客气,如:

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的解决方案(下)的作品完全一样瓦尔,据我可以告诉。

  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

请注意,我改变了搜索模式,包括负号和小数点分隔符。 我也改变了数据类型的强制转换为浮动。 瓦尔返回VB6双,这是同为SQL Server浮动。 - G. Mastros



文章来源: Do we have any equivalent function in SQL SERVER for VAL() function of MS Access?