SQL语句(有难度。回答测试通过在送1000分)(300分)

  • 主题发起人 主题发起人 网中戏
  • 开始时间 开始时间

网中戏

Unregistered / Unconfirmed
GUEST, unregistred user!
表A是一个记事本文件 .里有如下内容
B
001001177979420061001075740
001001526032220061001074235
001001177979420061001162749
001001526032220061001161304
001001178165520061001155739
保存在c:/a.txt
*****************************
用下面语句
select B from OpenRowset('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=c:/;','select * from A.txt')

查询后得到
1.001177979420061E+24
1.001526032220061E+24
1.001177979420061E+24
1.001526032220061E+24
1.001178165520061E+24
///////////////////////////////////
大家把上面内容复制到c:/a.txt中

用查询分析器执行上面的语句就可以看到
 
B列用字符性的就行了。
应该没有这个问题。
 
我想你的B列一定不是integer型的数据,要不你保存不了“001001177979420061001075740”这个数的前面两个“0”的,如果你的B列又不是“varchar”的话,请先把那类型改为“varchar”。
当然最好把SQL写成这样,一定能实现你的要求:
SELECT Cast(B as varchar(27)) as B FROM A
这个27是由你要求的字符长度来定的,因为你的“001001177979420061001075740”的长度就是27。
 
来自:czywin, 时间:2006-11-13 13:47:50, ID:3621760
B列用字符性的就行了。
应该没有这个问题。
同意!因為好明顯現在你是用另一個表現方式來表現那些數據..
改變一下就可以了~
 
可能是数据类型造成的.
 
你的B列是什么数据类型呀,应该不会有楼主说的那种情况出现。
 
表A是一个记事本文件 .里有如下内容
[red]B
001001177979420061001075740
001001526032220061001074235
001001177979420061001162749
001001526032220061001161304
001001178165520061001155739[/red]
保存在c:/a.txt
*****************************
用下面语句
select B from OpenRowset('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=c:/;','select * from A.txt')

查询后得到
1.001177979420061E+24
1.001526032220061E+24
1.001177979420061E+24
1.001526032220061E+24
1.001178165520061E+24
///////////////////////////////////
大家把上面红色内容复制到c:/a.txt中
执行上面的语句就可以看到
 
select Cast(B as varchar(27)) as B from OpenRowset('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=c:/;','select * from A.txt')
这样子不行吗?
 
To
fanybul
你的查询结果还是
1.001177979420061E+24
1.001526032220061E+24
1.001177979420061E+24
1.001526032220061E+24
1.001178165520061E+24
 
你先在SQLSERVER中建好这个表,然后在查询分析器中用

CREATE TABLE #TEMP (
B VARCHAR(50))


BULK INSERT #TEMP
FROM 'C:/A.TXT'
WITH
(
FIELDTERMINATOR = ' ',
ROWTERMINATOR = '/n',

)

SELECT * FROM #TEMP
 
我想你把“'select * from A.txt'”改为“'select Cast(B as varchar(27)) as B from A.txt'”,就是把所有字段列出来,不要用*来省略,同时把B字段改为“Cast(B as varchar(27)) as B”,我想应该行的。
我怀疑这个语句“select Cast(B as varchar(27)) as B from OpenRowset('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=c:/;','select * from A.txt')
”在做之前,已经给这句话“'select * from A.txt'”把B字段的内容改为:
1.001177979420061E+24
1.001526032220061E+24
1.001177979420061E+24
1.001526032220061E+24
1.001178165520061E+24
了,所以才会出现这样的结果的。
你再再试了。
就是用:
select Cast(B as varchar(27)) as B from OpenRowset('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=c:/;','select Cast(B as varchar(27)) as B,… from A.txt')
说明;“…”表示你要添加的其它字段。
 
To
fanybul

select Cast(B as varchar(27)) as B from OpenRowset('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=c:/;','select Cast(B as varchar(27)) as B,… from A.txt')

执行后错误如下

服务器: 消息 7321,级别 16,状态 2,行 12
准备对 OLE DB 提供程序 'MSDASQL' 执行查询时出错。
[OLE/DB provider returned message: [Microsoft][ODBC Text Driver] 语法错误 (操作符丢失) 在查询表达式 'Cast(B as varchar(27))' 中。]
 
TO 李翔鹏
不能建表。需要直接查
 
现在我可以肯定为什么老是查询出来会是:
1.001177979420061E+24
1.001526032220061E+24
1.001177979420061E+24
1.001526032220061E+24
1.001178165520061E+24
就是因为有这句DefaultDir=c:/;','select * from A.txt'中的'select * from A.txt'存在。
如果能在这里把类型变过来,我想就不会有事的。

你的查询语句用什么控件来实现的?
 
TO fanybul
你先建个a.txt放在c:/下 在SQL的查询分析器中执行([red]SQL语句[/red])一下就知道了
 
要不你把这B字段这些值之前加个空格,也就是:
001001177979420061001075740
001001526032220061001074235
001001177979420061001162749
001001526032220061001161304
001001178165520061001155739
试试行不行
 
本想实验一下的了
可是发现SQL被我删除了
 
你先打开EXCEL,然后打开个这个文本文件,会提示下一步,下一步,选择导入为文本文格式的,然后保存为EXCEL文件,然后把这个文件扩展名再改为CSV.再试试行不行.
 
TO fanybul,
加空格 加字母都试了。还是那样。应该是语句有毛病。所以求新SQL语句
 
To 网中戏,我尽力了。
如果有答案,麻烦告诉我一声:fyb08@163.com
 
后退
顶部