我的数据库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
感谢您的帮助
答案 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