2012年2月15日 星期三

MSSQL 與 MySQL 的差異



datetime

1. 無法呼叫?

Catchable fatal error: Object of class DateTime could not be converted to string in D:\....\test.php on line 104

要在 connectionInfo新增 ReturnDatesAsStrings 值為 1 ,例如:


$connectionInfo = array("Database"=>"$dbname","UID" => '$uid', "PWD" => '$pwd', "CharacterSet" => "UTF-8",'ReturnDatesAsStrings'=>1);

$conn = sqlsrv_connect( $serverName, $connectionInfo);



2.尾數多 3 個 0 ?

datetime 的型態是 YYYY-MM-DD hh:mm:ss[.nnn],尾數多 3 碼。

可用 smalldatetime :YYYY-MM-DD hh:mm:ss

Date and Time Functions (Transact-SQL)



3.時間
2012-02-16 03:03:08  (MySQL datetime 格式)

SELECT CONVERT(varchar(256), GETDATE(), 120)



20120216061550 --年月日時分秒 (14位數)

select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')


20120216061550827 --年月日時分秒+毫秒 (17位數)

select replace(replace(replace(replace(CONVERT(varchar, getdate(), 121 ),'-',''),' ',''),':',''), '.', '')



ansi_padding


預設值是 'ON',會使欄位會自動產生空格。假設我在插入某個欄位的時候,插入的值是 1 ,並沒有空格。但是呼叫出來之後,可能會變成 '1 ' ,注意這個 1 距離右邊的間距比較大,有一個空格。可以設為 off。不過根據這篇的說法:

在未來的 SQL Server 版本中,ANSI_PADDING 將始終為 ON,且將此選項

顯式設置為 OFF 的任何應用程式都將產生錯誤。 請避免在新的開發工作

中使用此功能,並著手修改當前使用此功能的應用程式。


不知道為什麼要強制設為 ON ?



Trim

沒有單純的 TRIM  函數,要用 LTRIM 或 RTRIM。可以這樣用:LTRIM(RTRIM(@text)),甚至寫成一個自訂函數:


-- MS SQL Trim function

-- Removes leading and trailing white spaces from the supplied

-- text

CREATE FUNCTION dbo.trim(@text varchar(8000))

RETURNS varchar(8000)

BEGIN

 RETURN LTRIM(RTRIM(@text))

END

go


可參考這篇文章




沒有留言:

張貼留言