当我们在VBA&中定义记录集时从数据库读取数据,记录集将其数据类型转换为表的列数据类型。
Dim rs as adobb.RecordSet
Set rs = CmdSqlData.Execute() ' After this rs fields will be stored based on table's datatype
有没有办法将记录集本身设置为String和Perform,
Set rs = CmdSqlData.Execute()
对于Eg:如果Database表定义中有时间戳值(具有整数值),则Recordsset将其字段数据类型设置为timestamp。
问题是,在数据库中,
时间值是12345(不是日期和时间),但是当记录集读取它时,它 例如:2012年6月23日 十点15分23秒
我希望价值为12345
答案 0 :(得分:2)
您的SELECT语句需要为Teradata TIMESTAMP执行显式CAST到FLOAT(DATE是INTEGER)
SELECT CURRENT_TIMESTAMP()
, CAST(CURRENT_TIMESTAMP() AS FLOAT) AS NumericTimeStamp
;
你应该能够解决VBA的其余部分,因为Recordset会将NumericTimeStamp识别为FLOAT而不是TIMESTAMP。
修改强>
以下SELECT语句将采用带有FORMAT子句的整数,并返回一个字符数据类型作为双重转换的结果:
SELECT CAST(CAST(1234 as INTEGER FORMAT '99:99:99') AS CHAR(8));
您是否尝试使用SELECT语句打开记录集,明确地将包含时间的列作为CHAR(8)进行CAST?
答案 1 :(得分:1)
我设法现在单独转换此时间戳。但是有多种时间戳格式可供使用。我无法自动将SQL查询从不同的数据类型转换为字符串。 我要求VBA将TERADATA VALUE读为字符串 我做了什么,
If Field_format = "99:99:99" then
Sql = "Select Cast(Field_format as integer) from Mytable"
Elseif Field_format = "99:99:99.999" then
Sql = "Select Cast(Field_format as Float) from Mytable"
Elseif Field_format = "99:99:99.999" then
Sql = "Select Field_format from Mytable"
End if
...
Set rs = CmdSqlData.Execute()
请注意teradata中有这么多数据类型(大约400+),我不能像上面那样转换everthying。
我只是想让VBA将Teradata值读为字符串。 想知道StackOverflow中没有VBA专家
答案 2 :(得分:0)
如果您要连接到SQL Server数据库,则timestamp数据类型是一个二进制字段,用于确定记录是否已更改(请参阅How to convert SQL Server's timestamp column to datetime format)。这与日期时间字段不同,日期时间字段包含时间和日期。
从ADO中的记录集返回一个字符串需要像:
Dim cn as ADODB.Connection
Dim rs as ADODB.Recordset
Dim strSQL as string
Dim strSomething as string
strSQL = "SELECT fld1 FROM tbl1"
Set cn = New ADODB.Connetion
cn.ConnectionString = {your connection string here}
cn.open
rs.open strSQL, cn
While Not rs.EOF
strSomething = rs!fld1
Wend
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing