0 0

怎样写SQL语句取两个日期之间的年月作为列名,两个日期是变量的15

怎样写SQL语句取两个日期之间的年月作为列名,两个日期是变量的
比如 我取2000-01 到2011-12之间的年月

在 test表里 
  id       name
1 张山
2 张三
3 李四

弄成这样
id   name  2000-01 2000-01 2000-01 2000-01 2000-01~~~2011-06
 
1 张山 NULL NULL NULL NULL NULL       NULL
2 张三 NULL NULL NULL NULL NULL       NULL
3 李四 NULL NULL NULL NULL NULL        NULL

我用这种方法写,不过它报错。
declare @开始日期 nvarchar(50),@结束日期 nvarchar(50)
set @开始日期='2000-01'
set  @结束日期='2011-06'
--left(convert(nvarchar,getdate(),120),7) from test
while (@开始日期<@结束日期)
begin
EXEC('ALTER TABLE test ADD
                ['+@开始日期+'] nvarchar(50) NULL')
                EXEC('UPDATE  test set test.['+@开始日期+']=''@开始日期'' ')
set @开始日期='@开始日期+1'

end
2011年11月17日 20:31

2个答案 按时间排序 按投票排序

0 0

采纳的答案


if exists(select 1 from #test)
begin
declare  @yuefen nvarchar(50)
declare my_cursor cursor for
select distinct yuefen from #test 
open my_cursor
fetch next from my_cursor into @yuefen
while @@fetch_status=0


While @开始日期<=@结束日期
Begin

Set @sql='ALTER TABLE temp_临时表Head'+@StaffID+' Add ['+Left(@开始日期,7)+'] nvarchar(50) NULL  '
       Exec(@sql)
       Print @sql
      Set @sql='UPDATE temp_临时表Head'+@StaffID+' set temp_临时表Head'+@StaffID+'.['+Left(@开始日期,7)+']='''+Left(@开始日期,7)+''' where ord=''1'''
     -- Set @开始日期=Convert(nvarchar,DATEADD(M,1,@开始日期),23)
Print @sql  --输出查看
      Exec(@sql)--执行
   Set @开始日期=Convert(nvarchar,DATEADD(M,1,@开始日期),23)
fetch next from my_cursor into @yuefen
end
close my_cursor
deallocate my_cursor
end

2011年11月22日 20:10
0 0

drop table test

create table test
(
	id int primary key identity(1,1),
	name varchar(20)
);

alter table test add clm_t1 nvarchar(20) null
alter table test drop column ['+@dateStr+']

select * from test;

declare @startYear int,@endYear int;
declare @startMonth int,@endMonth int
declare @dateStr nvarchar(20)
declare @yearStr nvarchar(20)
declare @monthStr nvarchar(20)

set @startYear = 2000
set @endYear=2011
set @startMonth=1
set @endMonth=12

while(@startYear<=@endYear)
begin
	while(@startMonth<=@endMonth)
	begin
		set @yearStr = convert(nvarchar,@startYear,4)
		if(@startMonth<10)
		begin
			set @monthStr = '0'+convert(nvarchar,@startMonth,2)
		end
		else
		begin
			set @monthStr = convert(nvarchar,@startMonth,2)
		end
		set @dateStr = @yearStr +'-'+@monthStr
		print @dateStr
		exec('alter table test add ['+@dateStr+'] nvarchar(50) null')
		set @startMonth = @startMonth+1
	end
	set @startYear = @startYear+1
	print convert(nvarchar,@startYear,4)
end

2011年11月18日 00:02

相关推荐

    存储过程中怎么动态执行sql语句

    通过以上两个示例可以看出,在Oracle存储过程中实现动态SQL语句的关键在于利用`EXECUTE IMMEDIATE`动态执行SQL语句以及通过创建包的方式来实现更为复杂的动态数据处理逻辑。这两种方法不仅提高了代码的灵活性,还...

    SQLserver中按年月日生成日期型自增编码.pdf

    本文档介绍了在 SQL Server 中生成日期型自增编码的方法,通过创建两个函数 `GenCustomCode` 和 `GenCustomID`,可以生成按年月日的日期型自增编码。该方法可以应用于各种业务系统中,满足不同业务需求的日期型自增...

    在PB中使用动态SQL语句快速实现组合查询.pdf

    例如,在《网络用户管理系统》的开发过程中,开发者可能会构建一个如下的动态SQL语句: ```sql SELECT nid, 姓名, 性别, 出生年月, 职业, 单位全称, 部门, 联系电话 FROM dlyh WHERE 出生日期 BETWEEN :dat1 AND ...

    SQL Server 比较日期大小的方法

    这里,我们使用了BETWEEN运算符,它会选取介于两个值之间的所有记录。这两个值必须是相同数据类型的,因此,日期字符串应当与日期字段匹配。 然而,当日期数据来自用户输入,且以字符串形式存在时,我们需要将这些...

    通过存储过程获取编号,含年月日时分秒,14个字符,

    存储过程是在数据库中预编译好的SQL语句集合,可以接受输入参数、返回单个或多个结果集以及返回值。使用存储过程可以提高应用程序性能、增强代码重用性以及加强安全性。在MS SQL Server 2000中创建存储过程的基本...

    达梦数据库_SQL语言手册

    达梦数据库_SQL语言手册.pdf 数据库快照定义语句 数据库快照删除语句 第章数据查询语句和全文检索语句 单表查询 简单查询 带条件查询 集函数 情况表达式 连接查询 子查询 标量子查询 表子查询 派生表子...

    [数据库] MySQL基础知识之日期判断及添加排序序号1

    例如,以下SQL语句将分别筛选出生日期为2016年8月23日、2016年8月以及2016年的所有学生: ```sql SELECT * FROM student WHERE DATE_FORMAT(birthday, '%Y-%m-%d')='2016-08-23'; SELECT * FROM student WHERE DATE...

    SQL_SET.rar_SetSQL_sql_sql set _sql set connectattr_sql set rouc

    "SQL_SET.rar_SetSQL_sql_sql set _sql set connectattr_sql set rouc"这个标题可能是在暗示一系列关于SQL中的"SET"关键字的教程或者文档集合,包括设置SQL语句、连接属性以及可能涉及到的行计数相关设置。...

    SQL编码规范.pdf

    - **规则2.11 在EXECSQL语句后加一个TAB键,然后再写SQL语句**:这有助于区分E-SQL和纯SQL语句。 - **规则2.12 SQL语句的关键字SELECT、FROM、WHERE、AND等,必须尾部对齐**:通过对齐这些关键字,可以快速定位和...

    存储过程OUTPUT实例

    在SQL Server中,存储过程是一种预编译的SQL语句集合,它可以接受输入参数并返回输出参数,从而实现更复杂的数据库操作。存储过程不仅可以提高代码的执行效率,还可以增强代码的安全性和可重用性。在本文中,我们将...

    PlSql----甲骨文学习笔记

    * 块结构:PL/SQL的基本结构单位,包含变量、语句和控制结构 * 变量:用于存储数据的容器 * 语句:用于执行操作的语句 * 控制结构:用于控制程序流程的语句 例如,创建一个名为"Hello World"的存储过程: ```sql ...

    实现公司管理数据系统的编程.ppt

    - 需要编写Transact-SQL语句来获取雇员的姓名、性别、出生年月及雇佣日期,并展示其订单明细、订单数量和订单总金额。 综上所述,实现公司管理数据系统的编程涉及SQL Server的基础知识,包括变量、函数的使用,...

    批处理实现sqlserver 2005远程异地数据库备份

    接下来创建一个变量用于记录当前日期,并将其格式化为“年月日”格式(YYYYMMDD),以便在后续操作中作为文件夹名称使用: ```batch set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%" ``` 这个命令行中的关键点在于利用`...

    编码规范--SQL语言规范

    - **绑定变量的应用:** 共享SQL语句应使用绑定变量,减少编译开销,提高执行效率。 - **子查询优化:** 减少子查询的使用,优先考虑JOIN操作,以减少数据处理的层级与复杂度。 - **函数与逻辑运算优化:** 使用...

    Msql 动态创建表

    以上示例代码展示了如何在存储过程中使用动态SQL语句来创建两个不同的表:`mtpulseYYYYMM` 和 `pedoYYYYMM`。其中`str_date`变量用于获取当前日期的年月部分,格式为`YYYYMM`,然后使用这个变量来动态地构建表名。 ...

    oracle实验报告

    (4)SELECT语句中的WHERE条件可以包含PL/SQL块中定义的变量及表达式,但变量名不要同数据库表列名相同。 (5)在未使用显式游标的情况下,使用SELECT语句必须保证只有一条记录返回,否则会产生异常情况。 [例3-1] ...

    SQL数据库完整实验报告.docx

    - **外键(FOREIGN KEY)**:用于建立两个表之间的关联。 - **唯一性(UNIQUE)**:确保列中的值是唯一的。 - **非空(NOT NULL)**:确保列中的值不能为空。 - **索引和视图**:了解索引的作用以及如何创建和...

    在VB_SQLServer2000系统中利用ADO进行各种查询的实现

    查询主窗体的`Load`事件中,初始化数据库连接,设置SQL语句,执行查询并显示结果。关键代码片段如下: ```vb Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset ' 数据库连接 conn.Open "Provider=...

    pl/sql学习小结笔记

    声明局部变量后,可以在BEGIN和END之间编写执行语句。 ```sql declare i integer; begin -- 测试语句 end; ``` - **命名块**:命名块可以通过PROCEDURE或FUNCTION定义,具有名字并可在数据库中存储。它们...

Global site tag (gtag.js) - Google Analytics