如何将其从 TSQL 转换为 MYSQL? [英] How do I convert this from TSQL to 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屋!