希望CSDN的大师傅帮忙,谢谢( 非常难的日期问题) declare @t datetimeset @t = getdate()select dateadd(day,270,@t)/*(无列名)----------------------2010-04-05 16:55:44.500*/ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 --这样?SELECT DATEADD(MONTH, 270/30, '2008/04/25')/*2009-01-25 00:00:00.000*/ CREATE FUNCTION FN_REPSTR(@收货记录 VARCHAR(50),@有效期 INT)RETURNS VARCHAR(100)ASBEGIN DECLARE @R VARCHAR(100) DECLARE @S VARCHAR(100) DECLARE @I INT SET @R='' SET @I = CHARINDEX(' ',@收货记录) WHILE @I>0 BEGIN SET @S=LEFT(@收货记录,@I-1) SET @收货记录 = STUFF(@收货记录,1,@I,'') IF ISDATE(@S) = 1 SET @S= CONVERT(VARCHAR(10),DATEADD(DAY,@有效期,@S),111) SET @R = @R + @S +' ' SET @I = CHARINDEX(' ',@收货记录) END SET @R = @R + @收货记录 RETURN @RENDGODECLARE @A TABLE (PARTNO VARCHAR(10), UNIT VARCHAR(5), QTY INT, 收货记录 VARCHAR(50), 有效期 INT)INSERT @A SELECT'101-001', 'KG' , 250 , '08/04/25 300' , 270 UNION ALL SELECT'101-002', 'LYD' , 500 , '09/04/25 200 09/02/02 360' , 730 SELECT * ,到期日 = DBO.FN_REPSTR(收货记录,有效期)FROM @A -- 结果PARTNO UNIT QTY 收货记录 有效期 到期日---------- ----- ----------- -------------------------------------------------- ----------- ----------------------------------------------------------------------------------------------------101-001 KG 250 08/04/25 300 270 2009/01/20 300101-002 LYD 500 09/04/25 200 09/02/02 360 730 2011/04/25 200 2011/02/02 360 DECLARE @TB TABLE([PARTNO] VARCHAR(7), [UNIT] VARCHAR(3), [QTY] INT, [收货记录] VARCHAR(25), [有效期] INT, 到期日 VARCHAR(31))INSERT @TB SELECT '101-001', 'KG', 250, '08/04/25 300', 270, NULL UNION ALL SELECT '101-002', 'LYD', 500, '09/04/25 200 09/02/02 360', 730, NULLUPDATE @TB SET 到期日=[收货记录]UPDATE @TB SET 到期日=STUFF(到期日, PATINDEX('%[0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日), 8, CONVERT(VARCHAR(10), DATEADD(MONTH, [有效期]/30, CAST('20'+SUBSTRING(到期日, PATINDEX('%[0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日), 8) AS DATETIME)), 120) )WHILE @@ROWCOUNT>0BEGIN UPDATE @TB SET 到期日=STUFF(到期日, PATINDEX('%[ ][0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日)+1, 8, CONVERT(VARCHAR(10), DATEADD(MONTH, [有效期]/30, CAST('20'+SUBSTRING(到期日, PATINDEX('%[ ][0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日)+1, 8) AS DATETIME)), 120) ) WHERE PATINDEX('%[ ][0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日)>0 ENDSELECT * FROM @TB/*PARTNO UNIT QTY 收货记录 有效期 到期日------- ---- ----------- ------------------------- ----------- -------------------------------101-001 KG 250 08/04/25 300 270 2009-01-25 300101-002 LYD 500 09/04/25 200 09/02/02 360 730 2011-04-25 200 2011-02-02 360*/ 求个简单的sql语句,谢谢! 请问这个字符型不确认列交叉表如何实现? 请教SQL,如何把两个表的两个字段查询出来的数据放到同一字段中? 查询到的 @F1 是条Insert语句,怎么样才能使用!!! 根据某列的值,覆盖其它列的数据,怎么做? 数据库文件过大 80G 请教一个问题.急,在线等!谢谢 绝对挑战CSDN的大师 谢谢 在一个表中添加一条记录,另一个表的某条记录的一个值加1 如何把Oracle的库导入到SQL Server中?? 三个表联合查询问题 求sql 想在一个表中查询某个字段连续N条记录是连续+1的第一条记录
SELECT DATEADD(MONTH, 270/30, '2008/04/25')
/*
2009-01-25 00:00:00.000
*/
@收货记录 VARCHAR(50),@有效期 INT)
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @R VARCHAR(100)
DECLARE @S VARCHAR(100)
DECLARE @I INT
SET @R=''
SET @I = CHARINDEX(' ',@收货记录)
WHILE @I>0
BEGIN
SET @S=LEFT(@收货记录,@I-1)
SET @收货记录 = STUFF(@收货记录,1,@I,'')
IF ISDATE(@S) = 1
SET @S= CONVERT(VARCHAR(10),DATEADD(DAY,@有效期,@S),111)
SET @R = @R + @S +' '
SET @I = CHARINDEX(' ',@收货记录)
END
SET @R = @R + @收货记录
RETURN @R
END
GODECLARE @A TABLE (PARTNO VARCHAR(10), UNIT VARCHAR(5), QTY INT, 收货记录 VARCHAR(50), 有效期 INT)
INSERT @A SELECT
'101-001', 'KG' , 250 , '08/04/25 300' , 270
UNION ALL SELECT
'101-002', 'LYD' , 500 , '09/04/25 200 09/02/02 360' , 730
SELECT *
,到期日 = DBO.FN_REPSTR(收货记录,有效期)
FROM @A -- 结果
PARTNO UNIT QTY 收货记录 有效期 到期日
---------- ----- ----------- -------------------------------------------------- ----------- ----------------------------------------------------------------------------------------------------
101-001 KG 250 08/04/25 300 270 2009/01/20 300
101-002 LYD 500 09/04/25 200 09/02/02 360 730 2011/04/25 200 2011/02/02 360
INSERT @TB
SELECT '101-001', 'KG', 250, '08/04/25 300', 270, NULL UNION ALL
SELECT '101-002', 'LYD', 500, '09/04/25 200 09/02/02 360', 730, NULLUPDATE @TB SET 到期日=[收货记录]UPDATE @TB
SET 到期日=STUFF(到期日,
PATINDEX('%[0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日),
8,
CONVERT(VARCHAR(10), DATEADD(MONTH, [有效期]/30, CAST('20'+SUBSTRING(到期日, PATINDEX('%[0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日), 8) AS DATETIME)), 120)
)WHILE @@ROWCOUNT>0
BEGIN
UPDATE @TB
SET 到期日=STUFF(到期日,
PATINDEX('%[ ][0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日)+1,
8,
CONVERT(VARCHAR(10), DATEADD(MONTH, [有效期]/30, CAST('20'+SUBSTRING(到期日, PATINDEX('%[ ][0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日)+1, 8) AS DATETIME)), 120)
)
WHERE PATINDEX('%[ ][0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日)>0
ENDSELECT * FROM @TB
/*
PARTNO UNIT QTY 收货记录 有效期 到期日
------- ---- ----------- ------------------------- ----------- -------------------------------
101-001 KG 250 08/04/25 300 270 2009-01-25 300
101-002 LYD 500 09/04/25 200 09/02/02 360 730 2011-04-25 200 2011-02-02 360
*/