【问题标题】:Excel & SQL: How to convert string to double in Select statementExcel & SQL:如何在 Select 语句中将字符串转换为双精度
【发布时间】:2011-01-07 00:23:02
【问题描述】:

我有一张 Excel 表格。其中一列(“ID”)包含具有以下值的字符串:1.01、1.02、1.03、2.01、3.01、3.04 等。

我想获取该工作表中的所有行,其中“ID”>= 使用 SQL 语句和 ADO 的某个值 连接(来自 VBScript 代码)。 所以,我有两个问题:

1) 我可以在 SQL 中将 ID 的值转换为 double 吗?因此,我可以将值作为浮点数进行比较并应用 条件。 2) 我可以在 Excel 工作簿中的 select 语句宏中使用吗?

【问题讨论】:

    标签: sql vba vbscript ado


    【解决方案1】:

    CASTFLOAT 函数是 CDbl() 例如

    SELECT CDbl(ID) AS ID_float 
      FROM [Sheet$];
    

    注意DOUBLEFLOAT 的同义词,因此将Cast 缩写为Double

    【讨论】:

      【解决方案2】:

      试试

      WHERE CONVERT (ID, FLOAT) >= value
      

      【讨论】:

      • 它不起作用,错误:“[Microsoft][ODBC Excel 驱动程序] 查询表达式中的语法错误(缺少运算符)'Cast(TestCaseId as Float)> 20.01'。” SQL 语句:Select * from [Main$] where Cast(TestCaseId as Float)> 20.01
      • 也许查询对您的大于号之前没有空格这一事实很敏感?
      • 我不认为 ODBC 识别 CAST 尝试使用转换。请参阅编辑后的答案。
      • 使用 Convert 我得到“[Microsoft][ODBC Excel Driver] Undefined function 'CONVERT' in expression。”
      【解决方案3】:

      我找到了解决方案:如果我将 column 转换为 Integer,我会得到同样的效果,所以,我使用了 CInt 函数:

      Select  *  from ["&strSheetName&"$]   where CInt(TestCaseId)  >= " & abs (strRow)
      

      【讨论】:

      • 请记住,CInt 是“转换为 SMALLINT”(2 个字节,Int16 等)。如果您想“转换为 INTEGER”(4 个字节、Int32 等),那么您需要 CLng 函数。是的,CInt 不映射到 SQL INTEGERCInt 是从 VBA“借来的”Integer 表示 Int16(2 个字节),这违反直觉:(
      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      相关资源
      最近更新 更多