gpt4 book ai didi

sql-server-2008 - 对于 MS Access 的 VAL() 函数,我们在 SQL SERVER 中有任何等效的函数吗?

转载 作者:行者123 更新时间:2023-12-05 01:17:15 27 4
gpt4 key购买 nike

直接在包含 VAL([CoLUMN_NAME]) 的 sql server 中运行代码 Access 查询时遇到问题.谷歌搜索后,我找到了一个 CAST(COLUMN AS DATATYPE)替换 VAL() .

但是当该列是 Text 类型时,如果我们写 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

Note that I changed the search pattern to include the negative sign and a decimal separator. I also changed the data type for the cast to a float. Val returns a vb6 double, which is the same as a SQL Server float. -- G. Mastros

关于sql-server-2008 - 对于 MS Access 的 VAL() 函数,我们在 SQL SERVER 中有任何等效的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14475799/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com