mysql - 我如何将其从 TSQL 转换为 MYSQL?

标签 mysql tsql

我正在尝试设置一个日期查找表,如下所示:http://www.techrepublic.com/blog/datacenter/simplify-sql-server-2005-queries-with-a-dates-table/326但是作者使用的是tsql而不是mysql。

我已经创建了表格,但现在我正试图让它填充。作者有这个:

创建表语法:

CREATE TABLE DateLookup
 (
     DateKey INT PRIMARY KEY,
     DateFull DATETIME,
     CharacterDate VARCHAR(10),
     FullYear CHAR(4),
     QuarterNumber TINYINT,
     WeekNumber TINYINT,
     WeekDayName VARCHAR(10),
     MonthDay TINYINT,
     MonthName VARCHAR(12),
     YearDay SMALLINT,
     DateDefinition VARCHAR(30),
     WeekDay TINYINT,
     MonthNumber TINYINT
 )






DECLARE @Date DATETIME
 SET @Date = '1/1/1900'     

 WHILE @Date < '1/1/2100'
 BEGIN
     INSERT INTO DateLookup
     (
         DateKey, DateFull, FullYear,
         QuarterNumber, WeekNumber, WeekDayName,
         MonthDay, MonthName, YearDay,
         DateDefinition,
                CharacterDate,
                WeekDay,
                MonthNumber
     )
     SELECT
         CONVERT(VARCHAR(8), @Date, 112), @Date, YEAR(@Date),
         DATEPART(qq, @Date), DATEPART(ww, @Date), DATENAME(dw, @Date),
         DATEPART(dd, @Date), DATENAME(mm, @Date), DATEPART(dy,@Date),
               DATENAME(mm, @Date) + ' ' + CAST(DATEPART(dd, @Date) AS CHAR(2)) + ',   
           ' + CAST(DATEPART(yy, @Date) AS CHAR(4)),
           CONVERT(VARCHAR(10), @Date, 101),
           DATEPART(dw, @Date),
           DATEPART(mm, @Date)

     SET @Date = DATEADD(dd, 1, @Date)
 END

我已经删除了所有的 @ 符号,看起来它可能不喜欢将日期作为变量名,但无法让它运行。

BEGIN
  DECLARE dateInsert DATETIME
     SET dateInsert = "1900-01-01"
     WHILE dateInsert < "2100-01-01" DO

         INSERT INTO DateLookup
         (
             DateKey, DateFull, FullYear,
             QuarterNumber, WeekNumber, WeekDayName,
             MonthDay, MonthName, YearDay,
             DateDefinition,
                    CharacterDate,
                    WeekDay,
                    MonthNumber
         )
         SELECT
             CONVERT(VARCHAR(8), dateInsert, 112), dateInsert, YEAR(@dateInsert),
             DATEPART(qq, dateInsert), DATEPART(ww, dateInsert), DATENAME(dw, dateInsert),
             DATEPART(dd, dateInsert), DATENAME(mm, dateInsert), DATEPART(dy,dateInsert),
                   DATENAME(mm, dateInsert) + ' ' + CAST(DATEPART(dd, dateInsert) AS CHAR(2)) + ',   
               ' + CAST(DATEPART(yy, dateInsert) AS CHAR(4)),
               CONVERT(VARCHAR(10), dateInsert, 101),
               DATEPART(dw, dateInsert),
               DATEPART(mm, dateInsert)

         SET dateInsert = DATEADD(dd, 1, dateInsert)
     END WHILE;
END;

编辑:我试过这个应用程序:http://sourceforge.net/projects/tsql2mysql/但它似乎无法在我的任何机器上运行。

编辑:它在附近失败 '声明日期插入日期时间 SET dateInsert = '1900-01-01' 尽管' 带或不带 @ 符号,带或不带 Date 重命名为 dateInsert。

我尝试删除“set dateInsert =”语句并替换为在声明末尾添加 default = "1900-01-01",但这是不行的。

我试过单引号和双引号,这似乎没有什么区别。

最佳答案

来自文档:DECLARE 仅允许在 BEGIN ... END 复合语句内使用,并且必须位于其开头,在任何其他语句之前。

更新

这里有一些更近的​​东西。您需要整理 CONVERT 的语法,这在 MySQL 中是不同的。

DELIMITER $$
CREATE PROCEDURE test()
BEGIN
    DECLARE dateInsert DATETIME;
     SET dateInsert = '1900-01-01';
     WHILE dateInsert < '2100-01-01' DO
        BEGIN
             INSERT INTO DateLookup
             (
                 DateKey, DateFull, FullYear,
                 QuarterNumber, WeekNumber, WeekDayName,
                 MonthDay, MonthName, YearDay,
                 DateDefinition,
                        CharacterDate,
                        WeekDay,
                        MonthNumber
             )

             SELECT
                 CONVERT(VARCHAR(8), dateInsert, 112), dateInsert, YEAR(@Date),
                 DATEPART(qq, dateInsert), DATEPART(ww, dateInsert), DATENAME(dw, dateInsert),
                 DATEPART(dd, dateInsert), DATENAME(mm, dateInsert), DATEPART(dy,@Date),
                       DATENAME(mm, dateInsert) + ' ' + CAST(DATEPART(dd, dateInsert) AS CHAR(2)) + ',   
                   ' + CAST(DATEPART(yy, dateInsert) AS CHAR(4)),
                   CONVERT(VARCHAR(10), dateInsert, 101),
                   DATEPART(dw, dateInsert),
                   DATEPART(mm, dateInsert)

             SET dateInsert = DATEADD(dd, 1, dateInsert)
        END
     END WHILE;
END $$

关于mysql - 我如何将其从 TSQL 转换为 MYSQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6613986/

相关文章:

php - 如何在 mysql php 中使用 IN OPERATOR 删除所有行

mysql - 将数组插入 MongoDB

mysql - SQL 连接重复计数

mysql - 如何在 mysql 中更改 photopath?

sql - T-SQL 作业步骤命令中的 GETDATE()

sql - GRANT EXECUTE 给所有存储过程

tsql - 在 SQL Server 2008 中的存储过程之间使用临时表

mysql - 如何将MySQL时间戳转换为带有时区的自定义格式?

tsql - Access SQL ROW_NUMBER() 的等效函数或表达式?

sql - 如何选择表 (A) 中共享相同外键 (itemId) 的行,其中表中的多行具有表 B 中的值