How can this mysql syntax running on SQL server:
SELECT TO_DAYS('2013-04-14')
how TO_DAYS function can running on SQL Server?
Thanks..
Finally, I use
SELECT CAST(CAST('2013-04-14' as datetime) as integer)
Thanks for your answer before
edit: I read the original question as TO_DATE, modified for TO_DAYS
I see TO_DAYS function in MySQL gives the number of days between year 0 and the date parameter.
A basic equivalent in SQL Server is to use DateDiff
e.g.
select Datediff(d,'1900-01-01', '2013-04-14')
Given that there isn't a year 0 in our calendar, I'd argue that the TO_DAYS function is poorly defined.
But assuming that you're using SQL Server 2008 or later, the following should work:
select 366+DATEDIFF(day,'00010101','20130414')
There's no avoiding the "fudge" factor, since SQL Server doesn't accept dates from the year 0 as valid.
Related
I have data in a table, and one of the columns is DATETIME.
select time from tbdt where unix_timestamp(time) > unix_timestamp(now()) order by time asc limit 1
now NodeJS prints wrong time in console.log() like,
actual datetime is 2018-12-16 15:00:00 in db table..
but mysql returns 2018-12-16T09:30:00.000Z
which is 5 hours 30 minutes difference and my time zone is +5:30 (IST)
I don't exactly know where it goes wrong, either in MySql or in Node Js
Need to use convert_tz function in MySql.
SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+5:30');
It has the following signature:
CONVERT_TZ(dt,from_tz,to_tz)
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_convert-tz
You should check the server time on which your MySQL is running as it will pick the time from the server on which it is hosted.
This is being done by the MySQL, not by NodeJS and you can verify the same by directly running your above query into the database by console or SQL developer tool.
This below Oracle query returns dates between last day of previous month till today. I need same results in MySQL. Can anybody help me to write the query in MySQL?
Please note that I have drive this query on 'DUAL'. There is no physical/actual table.
SELECT TRUNC(TRUNC(TRUNC(sysdate,'MM')-1)+level)-1 attendance_date
FROM dual
CONNECT BY level<= (TRUNC(sysdate)-TRUNC(sysdate,'mm'))+2;
MySQL simply doesn't have the nonstandard Oracle CONNECT BY feature. It doesn't yet have the standard recursive common table expression feature. Your present approach to your problem isn't the right one to get a sequence of dates.
There are other ways to to get a sequence of dates.
MySQL how to fill missing dates in range?
http://www.plumislandmedia.net/mysql/filling-missing-data-sequences-cardinal-integers/
I have migrated my application's database from SQL Server to MySQL. Now I'm adjusting my application code and I'm running into issues with date functions. Specifically, it seems like SQL Server's DateDiff() rounds up while MySQL's TimestampDiff() rounds down. For example:
SQL Server: select datediff(day,'2015-11-25 12:00:00', '2015-11-26') returns 1
MySQL: select timestampdiff(day,'2015-11-25 12:00:00', '2015-11-26') returns 0
What would be the best way to make MySQL return the same results as SQL Server? I can't just add 1 to each diff expression in MySQL because in cases where the difference between date1 and date2 are exactly X days apart, the MySQL evaluates exactly as SQL Server evaluates. For example:
SQL Server: select datediff(day,'2015-11-25', '2015-11-26') returns 1
MySQL: select timestampdiff(day,'2015-11-25', '2015-11-26') returns 1
EDIT: Comments are only suggesting conversions for differences in DAYs. I will also need to support differences in SECOND, WEEK, MONTH, YEAR, etc.
If I were doing this I would write a stored function SQL_SERVER_DATEDIFF() as a wrapper around MySQL TIMESTAMPDIFF() with adjustments to make it behave like SQL Server DATEDIFF() and do a search/replace through the code. This gives you the flexibility to fix this issue as well as any others that might arise in the future.
I have similar databases, they come from the same CMS but they use different databases: some are originally SQL Server, and another one is MySQL.
I had to migrate the MySQL database to SQL server since I have some scripts ready for SQL Server which a. a don't want to convert, b. are more complicated to convert since some functions I use are not implemented in MySQL.
This query on the database which were originally SQL Server runs without problems:
SELECT Birth_Date+1 FROM TABLENAME
while, when I run it on the same table in the database I migrated from SQL, I get this error:
Operand type clash: date is incompatible with int
Any idea why I get this error and how I can solve it?
I migrated my database with SSMA, SQL Server Migration Assistent, if this can help.
Thank you.
The message is rather clear, you can't use the + operator with a date and an int.
You should use the DATEADD function (in Sql Server)
And DATE_ADD in mysql.
DATE_ADD(Birth_Date, interval 1 DAY) for example.
which is
DATEADD(day, 1, Birth_Date) in Sql Server
The error seems pretty clear. You can't add an integer to a date, although you can add an integer to a datetime. Presumably, the data type of Birth_Date is date in one database and datetime (or something similar) in the other.
Here are two solutions:
SELECT cast(Birth_Date as datetime)+1 FROM TABLENAME;
SELECT dateadd(day, 1, Birth_Date) FROM TABLENAME;
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 6 years ago.
Improve this question
I have created an website using ASP.Net, a table using SQL Server, and I have published it to a provider.
What I want is to convert the MSSQL.sql file to Mysql.sql file. Is there any free software, or some code to convert it to SQL Server to MySQL ?
It would be much appreciated if someone could help me.
If you use phpMyAdmin to manage your MySQL (which almost all web hosts use) you can simply import the file in compatibility mode for MSSQL.
To do this, go to Import -> Choose your file -> Then select "MSSQL" from SQL compatibility mode: under Format specific options.
If you don't have phpMyAdmin already installed, you can download it from the site I linked above for free. The instructions on their website are very clear for installation.
After import, if you want to save a copy of the SQL file in MySQL's syntax simply use the Export feature.
When migrating databases from MS SQL to MySQL server it is often necessary to translate MS SQL queries according to MySQL syntax as well. Syntax of SQL queries in MS SQL and MySQL are similar but not identical. This article discovers 10 most popular differences between MS SQL and MySQL syntax. The target audience for this guide should have general database management knowledge and experience in composing SQL queries.
Sometime MS SQL table or column names are enclosed in square brackets in queries (e.g. if contains spaces or for some other reasons). MySQL does not allow square brackets around table of column names, they all must be replaced by ` symbol or cut off: [object] -> `object`.
MS SQL provides effective solution to avoid naming objects conflict and to manage user permissions on data access. This is schema, a logic container used to group and categorize objects inside the single database. When using schema the full name of database object in query may look like database.schema.object. However, there is no such semantic in MySQL, so all schema names must be cut off from queries.
CONVERT() function is used to convert an expression of one data type to another in MS SQL. In MySQL CONVERT() function converts text data between different character sets. However, there is equivalent function CAST(), so every occurrence of convert(type, expression) in MS SQL query must be replaced by cast(expression AS type) in MySQL query.
LEN() function returns length of string expression in MS SQL. MySQL equivalent for this function is LENGTH().
MS SQL function DATEADD() adds interval to the specified part of the date. MySQL operator '+' can do the same as follows:
DATEADD(year, 1, $date$) -> $date$ + interval 1 year
DATEADD(month, 1, $date$) -> $date$ + interval 1 month
DATEADD(day, 1, $date$) -> $date$ + interval 1 day
where $date$ is an expression of DATE type.
Microsoft SQL and MySQL have different sets of date processing functions, although most of them can be replicated as follows:
DATENAME(month, $date$) -> DATE_FORMAT($date$, '%M') or MONTHNAME(expression)
DATENAME(weekday, $date$) -> DATE_FORMAT($date$, '%W') or DAYNAME(expression)
DATEPART(year, $date$) -> DATE_FORMAT($date$, '%Y')
DATEPART(month, $date$) -> DATE_FORMAT($date$, '%m')
DATEPART(day, $date$) -> DATE_FORMAT($date$, '0')
GETDATE() -> NOW()
GETUTCDATE() -> UTC_TIMESTAMP()
where $date$ is an expression of DATE type.
MS SQL operator '+' allows to concatenate strings like this: 'string1' + 'string2'. In MySQL such expressions must be replaced by CONCAT('string1', 'string2').
MS SQL function CONTAINS(expression, template) searches for matches of template inside expression. MySQL has operator LIKE that implements the same semantics: expression LIKE %template%
If MS SQL query contains 'TOP (100) PERCENT' pattern just cut it off when composing MySQL query. If there is another percentage amount in that pattern, it can be replace by the following code in MySQL (works in MySQL 5.0.7 and higher):
SET #amount =(SELECT COUNT(*) FROM %table name%) * %percentage% / 10;
PREPARE STMT FROM '%original query% FROM %table name% LIMIT ?';
EXECUTE STMT USING #amount;
Syntax of JOIN constructions are very similar in MS SQL and MySQL. The only difference is that MS SQL keyword WHERE is replaced by ON in MySQL. For example:
... table1 CROSS JOIN table2 WHERE condition
must be translated into
... table1 CROSS JOIN table2 ON condition
PHPmyadmin option is nice for doing this job. But sometimes you will see errors while converting. We actually studied the DB structure of the MSSQL and wrote our own mysql statements based on it and did our unit testing and learned few things. So apart from conversion if you also want to do hands-on this is a good approach.