| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1973 人关注过本帖
标题:select 语句遭遇长度不够的情况
只看楼主 加入收藏
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
上传原表部分数据看看

坚守VFP最后的阵地
2014-04-28 18:22
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用hyz00001在2014-4-28 17:32:18的发言:

就好比第一条数据:
CHG031225    2014-3-4    调拨    辅料仓 To 镜片产线仓    A11.20.001350    80000    0    800    仓库调拨单据        0         
 
我需要拆分成下面两条记录:
调拨入库:
CHG031225    2014-3-4    调拨    镜片产线仓    A11.20.001350    80000    0    800    调拨入库        0         
调拨出库:
CHG031225    2014-3-4    调拨    辅料仓        A11.20.001350    80000    0    800    调拨出库        0
入库与出库的规则是什么

坚守VFP最后的阵地
2014-04-28 18:24
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:5 
以下是引用hyz00001在2014-4-28 17:32:18的发言:

就好比第一条数据:
CHG031225    2014-3-4    调拨    辅料仓 To 镜片产线仓    A11.20.001350    80000    0    800    仓库调拨单据        0         
 
我需要拆分成下面两条记录:
调拨入库:
CHG031225    2014-3-4    调拨    镜片产线仓    A11.20.001350    80000    0    800    调拨入库        0         
调拨出库:
CHG031225    2014-3-4    调拨    辅料仓        A11.20.001350    80000    0    800    调拨出库        0
分两行容易

坚守VFP最后的阵地
2014-04-28 18:26
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
亲,字符串有含全角字符的请用LEFTC()、RIGHTC()、SUBSTRC()等一些支持全角字符的函数哦,AT()貌似也有相关支持全角的函数哦。
2014-04-28 20:26
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用taifu945在2014-4-28 20:26:07的发言:

亲,字符串有含全角字符的请用LEFTC()、RIGHTC()、SUBSTRC()等一些支持全角字符的函数哦,AT()貌似也有相关支持全角的函数哦。


主要是中文的,应该没有全角吧。
2014-04-28 20:59
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用sdta在2014-4-28 18:26:43的发言:

分两行容易



谢谢。
请问具体代码如何编写呢?
insert into chdd (select * from chdd)?
然后
delete from chdd where type ='调拨单据'
2014-04-28 21:00
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
交流困难

坚守VFP最后的阵地
2014-04-28 21:02
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
楼主一会9说清了
2014-04-28 21:28
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:15 
就楼主所遇到的问题来说,主要是对 Select 语句的理解不够透彻。问题出在以表达式 LEFT(ck,AT('To',x)-1) 作为列字段时,该列的字段长度等于满足条件的第一个表达式的计算结果的长度。比如,第一条记录 ck 的值为“辅料仓 To 镜片产线仓”时,LEFT(ck,AT('To',x)-1)=“辅料仓 ”,则该字段的长度被定义成 7。此时,对于下一条记录“不良品仓 To 废品仓”时,虽然LEFT(ck,AT('To',x)-1)=“不良品仓 ”,但是由于字段长度是 7,所以系统只能保存前 7 个字符,即:“不良品”加上半个“仓”,就会出现乱字符。

假设 ck 字段的长度为20,正确的写法是:SELECT no,date,dw,PADR(LEFT(ck,AT('To',x)-1),20),pn,qty,qtyinvoice,amt,type,po,ln,pi,remark FROM chdd WHERE '仓库调拨单据'$type

也可以改为 CAST()函数:SELECT no,date,dw,CAST(LEFT(ck,AT('To',x)-1) AS C(20)),pn,qty,qtyinvoice,amt,type,po,ln,pi,remark FROM chdd WHERE '仓库调拨单据'$type

泉城飞狐
2014-04-28 21:31
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用liuxingang28在2014-4-28 21:31:18的发言:

就楼主所遇到的问题来说,主要是对 Select 语句的理解不够透彻。问题出在以表达式 LEFT(ck,AT('To',x)-1) 作为列字段时,该列的字段长度等于满足条件的第一个表达式的计算结果的长度。比如,第一条记录 ck 的值为“辅料仓 To 镜片产线仓”时,LEFT(ck,AT('To',x)-1)=“辅料仓 ”,则该字段的长度被定义成 7。此时,对于下一条记录“不良品仓 To 废品仓”时,虽然LEFT(ck,AT('To',x)-1)=“不良品仓 ”,但是由于字段长度是 7,所以系统只能保存前 7 个字符,即:“不良品”加上半个“仓”,就会出现乱字符。

假设 ck 字段的长度为20,正确的写法是:SELECT no,date,dw,PADR(LEFT(ck,AT('To',x)-1),20),pn,qty,qtyinvoice,amt,type,po,ln,pi,remark FROM chdd WHERE '仓库调拨单据'$type

也可以改为 CAST()函数:SELECT no,date,dw,CAST(LEFT(ck,AT('To',x)-1) AS C(20)),pn,qty,qtyinvoice,amt,type,po,ln,pi,remark FROM chdd WHERE '仓库调拨单据'$type


感谢你,成功的解决了问题,竟然是cast函数的问题。

在这个过程中我自己也用VBA来做了一个,主要用的是分裂的技术,共享出来如下:

Sub aa()
    fir = [a65536].End(xlUp).Row
    Range(Cells(1, 1), Cells([a65536].End(xlUp).Row, "m")).AutoFilter field:=9, Criteria1:="=*仓库调拨单据*", Operator:=xlAnd
    Range(Cells(2, 1), Cells([a65536].End(xlUp).Row, "m")).SpecialCells(xlCellTypeVisible).Copy
    Cells([a65536].End(xlUp).Row + 1, 1).PasteSpecial xlPasteValues
    fis = [a65536].End(xlUp).Row
    Range(Cells(fir + 1, "i"), Cells(fis, "i")) = "调拨入库"
    Range(Cells(fir + 1, "d"), Cells(fis, "d")).TextToColumns Destination:=Cells(fir + 1, "d"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 9), Array(2, 9), Array(3, 2)), TrailingMinusNumbers:=True
   
    Range(Cells(2, 1), Cells(fir, "m")).SpecialCells(xlCellTypeVisible).Copy
    Cells([a65536].End(xlUp).Row + 1, 1).PasteSpecial xlPasteValues
    fit = [a65536].End(xlUp).Row
    Range(Cells(fis + 1, "i"), Cells(fit, "i")) = "调拨出库"
    Range(Cells(fis + 1, "d"), Cells(fit, "d")).TextToColumns Destination:=Cells(fis + 1, "d"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 9), Array(3, 9)), TrailingMinusNumbers:=True
   
End Sub
2014-04-28 21:43
快速回复:select 语句遭遇长度不够的情况
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044790 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved