如何在ADO中使用CAST将Float值转换为String?
我试过
SELECT CAST([Field] AS VARCHAR(20)) FROM ...
和
SELECT CAST([Field] AS STRING) FROM ...
并始终获得OLE异常(未知错误)。
表格列包含混合数字(右对齐)和字母数字(左对齐)值。如果只有字母数字值,则ADO查询字段类型为String。
我正在使用Delphi 2009 ADO和Excel 2010。
答案 0 :(得分:4)
CAST是SQL-Server表达式。使用SELECT Field FROM...
:ADOQuery.FieldByName('Field').AsString
你不能通过SQL语句强制转换它。
使用混合数据类型时:
阅读this from MSDN(关于混合数据类型的注意事项):
ADO必须猜测Excel中每列的数据类型 工作表或范围。 (这不受Excel单元格格式的影响 设置。)如果您有数字值,可能会出现严重问题 与同一列中的文本值混合。 Jet和ODBC都有 Provider返回多数类型的数据,但返回NULL(空) 少数数据类型的值。如果两种类型同样混合 在列中,提供者选择数字而不是文本。
您需要在连接字符串的“扩展属性”部分中添加 IMEX=1
。
持久字段将是TWideStringField。
连接字符串应如下所示:
Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=C:\MyFile.xls;Mode=Share Deny None;Extended Properties="Excel 8.0;IMEX=1";...
答案 1 :(得分:2)
也许使用CStr
会起作用,即
SELECT CStr([Field]) FROM...
答案 2 :(得分:1)
尝试
SELECT IIF([Field] IS NULL, NULL, CSTR([Field])) AS [Field]
FROM ...