| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9867 人关注过本帖
标题:在数据表中如何用SQL查找某字段值最长的记录,并返回这个字段值的长度数字
只看楼主 加入收藏
YZCZWCB
Rank: 1
等 级:新手上路
帖 子:191
专家分:5
注 册:2010-1-9
结帖率:97.14%
收藏
已结贴  问题点数:5 回复次数:9 
在数据表中如何用SQL查找某字段值最长的记录,并返回这个字段值的长度数字



一个数据表AA.DBF中的一个字段A1(字符型)。这个A1中的值,有的比较长,有的比较少,如:长度最小的是10,最大的是20。

请问一下,我如何用SQL查找A1字段值中LEN()长度最大的值。返回一个数字。但不能特指定值等于20呀,我是举个例子的。
搜索更多相关主题的帖子: SQL 数据 字段 记录 数字 
2010-01-18 17:26
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
select max(len(alltrim(A1))) from AA into array ab
?ab(1)

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2010-01-18 17:29
YZCZWCB
Rank: 1
等 级:新手上路
帖 子:191
专家分:5
注 册:2010-1-9
收藏
得分:0 
再问一下,如何使表格某列的宽度就等于字段值的长度?

还有下面Select的语句中&,怎么是不对?

   zdm='thisform.grid1.column'+ALLTRIM(STR(i))+'.header1.caption'     && 依次取得各字段名
   Select max(len(alltrim(&zdm))) from Zfcg_sjbb into array nwidth   &&  以各字段名查找各字段的最长值,为各列设定宽度  


[ 本帖最后由 YZCZWCB 于 2010-1-18 19:15 编辑 ]
2010-01-18 18:59
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:0 
以下是引用YZCZWCB在2010-1-18 18:59:45的发言:

再问一下,如何使表格某列的宽度就等于字段值的长度?

还有下面Select的语句中&,怎么是不对?

   zdm='thisform.grid1.column'+ALLTRIM(STR(i))+'.header1.caption'     && 依次取得各字段名
   Select max(len(a ...

 zdm=thisform.grid1.columns(i).header1.caption
 Select max(len(alltrim(&zdm))) from Zfcg_sjbb into array nwidth
 alte dbf Zfcg_sjbb alte &zdm c(nwidth(1))
2010-01-18 19:44
YZCZWCB
Rank: 1
等 级:新手上路
帖 子:191
专家分:5
注 册:2010-1-9
收藏
得分:0 
楼上的,zdm=thisform.grid1.columns(i).header1.caption   错误提示是:“不是一个对象”。

因为我的GRID列是不固定的,是用于用户选择字段,事先不知道多少列的

Select max(len(alltrim(&zdm))) from Zfcg_sjbb into array nwidth


错误提示是:“找不到别名header1”。




alte dbf Zfcg_sjbb alte &zdm c(nwidth(1))  思路是修改字段

错误提示:语法出错。(nwidth(1))  其中的1什么意思呀。

[ 本帖最后由 YZCZWCB 于 2010-1-18 20:44 编辑 ]
2010-01-18 20:20
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:0 
以下是引用YZCZWCB在2010-1-18 20:20:14的发言:

楼上的,zdm=thisform.grid1.columns(i).header1.caption   错误提示是:“不是一个对象”。

因为我的GRID列是不固定的,是用于用户选择字段,事先不知道多少列的

Select max(len(alltrim(&zdm))) from Zfcg_sjbb  ...
  
我是参照你3楼的意思改的, 除非你3楼不但代码错了, 意思也错了~~~

其实, 要改字段长度是很简单的~~~假设要把 表a 所有字符型字段的长度改为最大宽度值的长度, 代码如下(测试无误)~~
 

sele 1
use 表a excl
for ii=1 to fcou()
    lsc =fiel(ii)
    if vart(&lsc)="C"
       sele max(len(allt(&lsc))) from 表a into arra tmpa
       alte dbf 表a alte &lsc c(tmpa(1))
    endif
endfor
brow
2010-01-18 20:42
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:5 
假设 你要使表格(grid)各字符列的宽度等于字段值的最大长度~那么(经测试,也无误):

sele 表名
for ii=1 TO This.ColumnCount
    lsc=this.columns(ii).header1.caption
    if vart(&lsc)="C"
       sele max(len(allt(&lsc))) from 表名 into arra tmpa
       this.columns(ii).width =tmpa(1)*系数
    endif
endfor


测试图:
图片附件: 游客没有浏览图片的权限,请 登录注册




[ 本帖最后由 茵梦湖 于 2010-1-18 21:04 编辑 ]
2010-01-18 20:54
YZCZWCB
Rank: 1
等 级:新手上路
帖 子:191
专家分:5
注 册:2010-1-9
收藏
得分:0 

对了,我就是这个意思/

this.columns(ii).width =tmpa(1)*系数


这个系数值是多少呀?
2010-01-18 21:17
YZCZWCB
Rank: 1
等 级:新手上路
帖 子:191
专家分:5
注 册:2010-1-9
收藏
得分:0 
最后的办法,修改字段宽度后,再加上一句thiform.grid1.columncount=-1,就能达到预期的效果了
2010-01-19 15:06
YZCZWCB
Rank: 1
等 级:新手上路
帖 子:191
专家分:5
注 册:2010-1-9
收藏
得分:0 
sele 1
use 表a excl
for ii=1 to fcou()
    lsc =fiel(ii)
    if vart(&lsc)="C"
       sele max(len(allt(&lsc))) from 表a into arra tmpa
       alte dbf 表a alte &lsc c(tmpa(1))
    endif
endfor


以上在实际应用中,很好。但是有个问题,楼上没注意,要修改的字段必须要有值,不能是空值,否则就会出错。我在应用的时,针对出错的情况分析了一下,作了局部调整。

sele 1
use 表a excl
for ii=1 to fcou()
    lsc =fiel(ii)
    if vart(&lsc)="C".and.!EMPTY(&lsc)
       sele max(len(allt(&lsc))) from 表a into arra tmpa
       alte dbf 表a alte &lsc c(tmpa(1))
    endif
endfor


红色部分就是我加上的,在运行中,没有出现错误信息了
2010-01-26 17:08
快速回复:在数据表中如何用SQL查找某字段值最长的记录,并返回这个字段值的长度 ...
数据加载中...
 
   



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

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