ASP.NET查询子字符串

时间:2010-10-06 10:39:33

标签: asp.net sql sql-server

我的数据库year_start_1中有这个字段,它是一个整数字段,输出的例子是20100827我正在尝试创建一个子字符串来创建年,周,日并将格式更改为27/08/2010

这是我正在尝试的

Dim query as String = "Select * from openquery (devbook, 'SELECT cast(year_start_1 as varchar(8)) as year_start_1, DATENAME(DAY, substring(CAST(year_start_1 AS VARCHAR(8)),6,2) + DATENAME(MONTH, substring(CAST(year_start_1 AS VARCHAR(8)),4,2) + DATENAME(YEAR, substring(CAST(year_start_1 AS VARCHAR(8)),1,4))) FROM web_statements')"

它只是抛出错误而我不确定原因:

  

服务器无法处理请求

我尝试过使用转换但不起作用。

有什么想法吗?

更新

与克里斯的建议

Dim query as String = "Select * from openquery (devbook, 'SELECT year_start_1, cast(year_start_1 as varchar(8)) as year_start_1, substring(CAST(year_start_1 AS VARCHAR(8)),7,2)+''/''+substring(CAST(year_start_1 AS VARCHAR(8)),5,2)+''/''+substring(CAST(year_start_1 AS VARCHAR(8)),1,4) FROM web_statements')"

仍然收到错误

由于

更新

似乎无法让它在查询中工作,所以不得不在ASP.Net代码中进行解决

'POINTS END DATE YEAR
Dim strPointsDateEndYear = Mid(drv.Row("year_end_1"), 3, 2)
Dim strPointsDateEndMonth = Mid(drv.Row("year_end_1"), 5,2)
Dim strPointsDateEndDay = Right(drv.Row("year_end_1"), 2)

Dim strPointsDateEnd As String = strPointsDateEndDay + "/" + strPointsDateEndMonth + "/" + strPointsDateEndYear

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

在下一个DATENAME开始之前,您的第一个DATENAME似乎没有关闭所有括号:

DATENAME(DAY, substring(CAST(year_start_1 AS VARCHAR(8)),6,2) + DATENAME[...]

我应该假设:

DATENAME(DAY, substring(CAST(year_start_1 AS VARCHAR(8)),6,2)) + DATENAME[...]

编辑:虽然修复了这个小错误(并将其转换为调试)但是我遇到了将字符串转换为日期的错误。我不确定日期名称的内容是做什么的,但是如何:

DECLARE @year_start_1 int
SET @year_start_1 = 20100827 

SELECT cast(@year_start_1 as varchar(8)) as year_start_1, 
substring(CAST(@year_start_1 AS VARCHAR(8)),7,2)+'/'+substring(CAST(@year_start_1 AS VARCHAR(8)),5,2)+'/'+substring(CAST(@year_start_1 AS VARCHAR(8)),1,4)

(转换为非基于表的select用于测试/调试目的)

所以你想要的最后一行sql将是(未经测试的):

Select * from openquery (devbook, 'SELECT cast(year_start_1 as varchar(8)) as year_start_1, substring(CAST(year_start_1 AS VARCHAR(8)),7,2)+'/'+substring(CAST(year_start_1 AS VARCHAR(8)),5,2)+'/'+substring(CAST(year_start_1 AS VARCHAR(8)),1,4) FROM web_statements')

第二次编辑调试说明:

我认为值得建议如何调试此类问题。该错误消息表明您发送子语句的链接服务器无法处理该请求。在这种情况下尝试的第一件事是直接在服务器上运行请求,看看会发生什么。在这种情况下,事实上只是解析它本身就会揭示我得到的第一个错误。

一旦您的语句运行表单管理工作室或服务器上的任何内容,您可以尝试将其转换回“openquery”样式语句,并查看ti是否仍然有效。基本上将复杂的场景分解成许多较小的位来单独测试每个场景。

答案 1 :(得分:0)

您在字符串上使用datename函数,但应在datetime值上使用。它们彼此嵌套在一起,所以你最终会在这一天结束,而且它甚至不能满足您的需求。

要获取您要求的格式,您可以使用字符串操作将其拆分为其组件并在它们之间添加斜杠:

substring(CAST(year_start_1 AS VARCHAR(8)),7,2) + '/' +
substring(CAST(year_start_1 AS VARCHAR(8)),5,2) + '/' +
substring(CAST(year_start_1 AS VARCHAR(8)),1,4)

答案 2 :(得分:0)

select  convert(varchar(10),convert(smalldatetime,'20100827'),103) will return 08/27/2010 

所以,你的解决方案是:

select  convert(varchar(10),convert(smalldatetime,convert(varchar,year_start_1)),103) will return 27/08/2010