如何将其从 TSQL 转换为 MYSQL? [英] How do I convert this from TSQL to MYSQL?

查看:54
本文介绍了如何将其从 TSQL 转换为 MYSQL?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to setup a date lookup table as in this: http://www.techrepublic.com/blog/datacenter/simplify-sql-server-2005-queries-with-a-dates-table/326 but the author is using tsql and not mysql.

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

I have created the table but now I'm trying to get it to populate. The author has this:

创建表语法:

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

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

I've removed all of the @ signs and it kind of looks like it might not like date as a variable name but haven't been able to get it to run.

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/但它似乎无法在我的任何机器上运行.

I tried this app: http://sourceforge.net/projects/tsql2mysql/ but it doesn't seem to run on any of my machines.

它在附近失败'声明日期插入日期时间设置日期插入 = '1900-01-01'尽管'带或不带 @ 符号,带或不带 Date 被重命名为 dateInsert.

It fails near 'DECLARE dateInsert DATETIME SET dateInsert = '1900-01-01' WHILE' with or without the @ signs, with or without Date being renamed as dateInsert.

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

I tried removing the 'set dateInsert =' statement and replacing with adding default = "1900-01-01" at the end of the declaration but that's a no go.

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

I've tried single and double quores, that didn't seem to make a difference.

推荐答案

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

更新

这里有更接近的东西.您需要理清 CONVERT 的语法,这在 MySQL 中是不同的.

Here's something closer. You'll need to sort out the syntax for CONVERT which is different in 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 $$

这篇关于如何将其从 TSQL 转换为 MYSQL?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆