数据库
首页 > 数据库> > VFP用SQL表达式创建临时表一处细节,不注意就会翻车

VFP用SQL表达式创建临时表一处细节,不注意就会翻车

作者:互联网

VFP本身也是支持SQL语句运行的,常规的SQL语句完全没有问题。
我们有时候会对查询的字段进行运算,但有些时候SQL并不是我们预想的结果,具体来说,就是SQL进行字符串运算会按第一个字段的长度进行裁切,这样就麻烦了。所以今天要注意这处细节,并给出解决方案。

因为用SQL指令创建表太常用了,这也是VFP极速开发的原因之一。

这样就可以轻松创建一个临时表。

select * from ryxx into cursor ryxx_tmp

有一个信息表,存放了人的姓+名,我们有时候需要进行两个相加运算,如

CREATE CURSOR tty (FirstName c(10),LastName c(10))
INSERT INTO tty values("jack","1")
INSERT INTO tty values("bob","234")

如果用函数对其进行相加运算,你会发现第二行的结果不是bob234,而是bob23

select GetFullName(FirstName, LastName) as FullName FROM tty INTO CURSOR tty2

SELECT tty2
brow
function GetFullName(tcFirstName, tcLastName)
return trim(tcFirstName) + trim(tcLastName)


SQL根据第一行的字段长度决定了后面所有字段的长度了,发生了裁切。

那怎么解决呢?
CAST命令就可以解决了。

select CAST(GetFullName(FirstName, LastName) as v(31)) as FullName FROM tty INTO CURSOR tty2

SELECT tty2
brow

cast对于转换到 字符型、Varchar 和 Varbinary 数据类型, 如果指定的字段宽度小于原始数据宽度, Visual FoxPro 截断值来适应字段宽度。对于转换到 字符型 数据类型, 如果指定宽度大于原始数据, Visual FoxPro 在值的后面填充空格。

标签:tty,INTO,tty2,SQL,GetFullName,翻车,VFP
来源: https://blog.csdn.net/fitche/article/details/123082476