读书人

200高分。数据查询有关问题

发布时间: 2012-03-06 20:47:55 作者: rapoo

200高分请教高手。数据查询问题
SELECT DISTINCT INo, IsNoEnd,IsIcControl,INoCom,DBegDate,TBegTime,DEndDate,TEndTime,DShowDate, TShowTime, DDropDate, TDropTime, SCopyZby, SFhZby, SDropZby,IsNoBeg, Zh, CONVERT(Varchar(8000), Sscript) AS Sscript FROM JsTxtSaveEx

问题是这样的,上面是我的SQL语句,主要是查询时去掉一些重复的记录。这样的语句在SQLSERVER2000中没有任何问题,而同样的语句在使用到Access数据时,则有问题,不知道如何解决,本人也试过用其它的方法来解决,但一直没有想到好的方法,请高手指教。

[解决办法]
问题在这里

CONVERT(Varchar(8000), Sscript) AS Sscript
[解决办法]
CONVERT(Varchar(8000), access中好像不支持吧
[解决办法]
access中没有 CONVERT
可以用cstr(Sscript)来完成了类似功能

具体参考VBA帮助

给你一些资料如下:
类型转换函数


每个函数都可以强制将一个表达式转换成某种特定数据类型。

语法
CBool(expression)

CByte(expression)

CCur(expression)

CDate(expression)

CDbl(expression)

CDec(expression)

CInt(expression)

CLng(expression)

CSng(expression)

CStr(expression)

CVar(expression)

CStr(expression)

必要的 expression 参数可以是任何字符串表达式或数值表达式。

返回类型
函数名称决定返回类型,如下所示:

函数 返回类型 expression 参数范围
CBool Boolean 任何有效的字符串或数值表达式。
CByte Byte 0 至 255。
CCur Currency -922,337,203,685,477.5808 至922,337,203,685,477.5807。
CDate Date 任何有效的日期表达式。
CDbl Double 负数从 -1.79769313486231E308 至 -4.94065645841247E-324;正数从 4.94065645841247E-324 至 1.79769313486232E308。
CDec Decimal 零变比数值,即无小数位数值,为
+/-79,228,162,514,264,337,593,543,950,335。对于 28 位小数的数值,范围则为
+/-7.9228162514264337593543950335;最小的可能非零值是 0.0000000000000000000000000001。
CInt Integer -32,768 至 32,767,小数部分四舍五入。
CLng Long -2,147,483,648 至 2,147,483,647,小数部分四舍五入。
CSng Single 负数为 -3.402823E38 至 -1.401298E-45;正数为 1.401298E-45 至 3.402823E38。
CStr String 依据 expression 参数返回 Cstr。
CVar Variant 若为数值,则范围与 Double 相同;若不为数值,则范围与 String 相同。



说明
如果传递给函数的 expression 超过转换目标数据类型的范围,将发生错误。

通常,在编码时可以使用数据类型转换函数,来体现某些操作的结果应该表示为特定的数据类型,而不是缺省的数据类型。例如,当单精度、双精度或整数运算发生的情况下,使用 CCur 来强制执行货币运算。

应该使用数据类型转换函数来代替 Val,以使国际版的数据转换可以从一种数据类型转换为另一种。例如,当使用 Ccur 时,不同的小数点分隔符、千分位分隔符和各种货币选项,依据系统的区域设置都会被妥善识别。

当小数部分恰好为 0.5 时,Cint 和 CLng 函数会将它转换为最接近的偶数值。例如,0.5 转换为 0、1.5 转换为 2。Cint 和 CLng 函数不同于 Fix 和 Int 函数,Fix 和 Int 函数会将小数部分截断而不是四舍五入。并且 Fix 和 Int 函数总是返回与传入的数据类型相同的值。

使用 IsDate 函数,可判断 date 是否可以被转换为日期或时间。Cdate 可用来识别日期文字和时间文字,以及落入可接受的日期范围内的数值。当转换一个数字成为日期时,是将整数部分转换为日期,小数部分转换为从午夜起算的时间。

CDate 依据系统上的区域设置来决定日期的格式。如果提供的格式为不可识别的日期设置,则不能正确判断年、月、日的顺序。另外,长日期格式,若包含有星期的字符串,也不能被识别。

CVDate 函数也提供对早期 Visual Basic 版本的兼容性。CVDate 函数的语法与 CDate 函数是完全相同的,不过,CVDate 是返回一个 Variant,它的子类型是 Date,而不是实际的 Date 类型。因为现在已有真正的 Date 类型,所以 CVDate 也不再需要了。转换一个表达式成为 Date,再赋值给一个 Variant,也可以达到同样的效果。也可以使用这种技巧将其他真正的数据类型转换为对等的 Variant 子类型。

注意 CDec 函数不能返回独立的数据类型,而总是返回一个 Variant,它的值已经被转换为 Decimal 子类型。
------解决方案--------------------


CStr
[解决办法]
我建了一个access表tt
字段test 类型设为数字,备注,都能用cstr函数返回数据呀
怎么你的不行呢?

你的Sscript字段是什么类型的?
[解决办法]
不明白楼主,既然已经是备注型,还用转化成字符串吗?不一样吗?
[解决办法]
这么高分的贴子是一定要顶的!
[解决办法]
我也新建了一个项目试验了,查询是可以,但是SELECT DISTINCT INo, IsNoEnd,IsIcControl,INoCom,DBegDate,TBegTime,DEndDate,TEndTime,DShowDate, TShowTime, DDropDate, TDropTime, SCopyZby, SFhZby, SDropZby,IsNoBeg, Zh, CStr(Sscript) AS Sscript FROM JsTxtSaveEx,这个语句后,Sscript 这个值显示出来不完全,只有一部份或没有内容。
-----------------------------
楼主Sscript字段里面是汉字或者含有回车换行符吧?
[解决办法]
不明白,接分
[解决办法]
在该字段只写一个字符串,在试一试
[解决办法]
数据转换部分不一样
[解决办法]
DISTINCT
相同的没显示呀
[解决办法]
你把 FROM JsTxtSaveEx 改为 FROM [JsTxtSaveEx]
试试看能不能取出Sscript值来.Access好像有一些这样的怪问题.
[解决办法]
access不好用,老有一些奇怪问题
还是sql server2000好用
[解决办法]
每种数据库支持的语法与函数都有些差异。这个问题很烦。
[解决办法]
那就 用sql2000吧! 不通数据库之间语法的细节问题很要命 我是弄不灵清了!
[解决办法]
SELECT DISTINCT INo, IsNoEnd,IsIcControl,INoCom,DBegDate,TBegTime,DEndDate,TEndTime,DShowDate, TShowTime, DDropDate, TDropTime, SCopyZby, SFhZby, SDropZby,IsNoBeg, Zh, CStr(Sscript) AS Sscript FROM JsTxtSaveEx

Sscript,本来就是一个备注型,是用不着CStr来转换的。
你是因为用了Distinct才不得不用CStr,这个思路本身是有问题的。
你的出发点是想要去掉重复,那么DISTINCT不行,就应该试试别的,而不是为了牵就DISTINCT,而去改变本身不需要改变的东西。

为什么不用:
SELECT INo, IsNoEnd,IsIcControl,INoCom,DBegDate,TBegTime,DEndDate,TEndTime,DShowDate, TShowTime, DDropDate, TDropTime, SCopyZby, SFhZby, SDropZby,IsNoBeg, Zh, Sscript
FROM JsTxtSaveEx
group by
INo, IsNoEnd,IsIcControl,INoCom,DBegDate,TBegTime,DEndDate,TEndTime,DShowDate, TShowTime, DDropDate, TDropTime, SCopyZby, SFhZby, SDropZby,IsNoBeg, Zh, Sscript FROM JsTxtSaveEx
[解决办法]
我突然又想到你需求的合理性,你怎么会有这种需求?

如果没有什么特殊原因,是不应该用这么繁琐的SQL来解决这么简单的问题的。
这样的SQL不利于维护!

读书人网 >.NET

热点推荐