ASP.NET查询子字符串

ASP.NET查询子字符串,asp.net,sql,sql-server,Asp.net,Sql,Sql Server,我的数据库中有这个字段year\u start\u 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_s

我的数据库中有这个字段
year\u start\u 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')"
它只是抛出了一个错误,我不知道为什么:

服务器无法处理请求

我尝试过使用convert,但不起作用

有什么想法吗

更新

根据克里斯的建议

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

感谢您的帮助,尽管在下一个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[...]
Edit:虽然修复了那个小错误(并将其转换为debug),但我在将字符串转换为日期方面遇到了一些错误。我不确定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)
(出于测试/调试目的,转换为非基于表的选择)

因此,您希望sql的最后一行是(未经测试):

第二次编辑调试注释:

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


一旦您的语句直接在服务器上运行FormManagementStudio或其他任何语句,您可以尝试将其转换回“openquery”样式的语句,并查看ti是否仍然有效。基本上,将复杂的场景分解为许多较小的部分,分别进行测试。

您正在对字符串使用
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)
因此,您的解决方案是:

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

@Inase刚刚得到一个
服务器无法处理T-SQL中的请求
error,+确实起到连接的作用。@Inase:T-SQL中的字符串连接运算符是
+
&
是一个数字运算符。@Guffa和@Nellius-是的..我刚刚检查过-它是!!:-)删除我的评论!!异常类型是什么?您是否在错误消息中获得该信息?否则,我怀疑您会收到默认的“no information exposed”错误消息。在这种情况下,您应该按照messare中关于如何更改web.config的说明进行操作,以便查看实际的错误消息。值得注意的是,前两部分的索引也有错误-它们应该从7和5开始,而不是从6和4开始。是的,我注意到与Chris相同,索引对于它们应该是的指针来说似乎是错误的。似乎无法使其正常工作。请查看我在查询中使用您的位进行的更新。您不需要复制我上面所做的所有操作。declare和set以及te@year\u start\u 1变量只是因为我没有一个包含适当数据的表,所以我想创建一个包含测试值的变量。我看到我再次更新了我的问题,但仍然给出了错误我做错了什么吗?你试过在链接服务器上运行内部命令吗(通过management studio或类似工具)或者这不是一个选项(例如没有直接访问)?可能SQL中仍然存在语法错误,请仔细检查所有内容,然后尝试试用精简版本(例如“选择'27/08/2010'”然后尝试建立您的查询。我看到您已经进行了一些转义,但可能还有其他需要检查的内容。只需尝试处理内部查询,直到您使其正常工作,然后看看是什么更改修复了它…没有链接服务器,我很难调试。。。
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