変数に含まれる値を、フォーマットとしてフォーマットさDateTime
れた変数(時間部分なし)に変換する必要があります。varchar
yyyy-mm-dd
それ、どうやったら出来るの?
変数に含まれる値を、フォーマットとしてフォーマットさDateTime
れた変数(時間部分なし)に変換する必要があります。varchar
yyyy-mm-dd
それ、どうやったら出来るの?
Microsoft Sql サーバーの場合:
--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2008-05-03'
--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
次のことを試してください。
CONVERT(varchar(10), [MyDateTimecolumn], 20)
日付だけでなく、完全な日付の時間については、次のようにします。
CONVERT(varchar(23), [MyDateTimecolumn], 121)
変換スタイルについては、次のページを参照してください。
http://msdn.microsoft.com/en-us/library/ms187928.aspx
または
SQLServerCONVERT()関数
SQL Server 2012 には新しい関数 FORMAT があります: http://msdn.microsoft.com/en-us/library/ee634924.aspx
また、カスタムの日時形式文字列を使用できます: http://msdn.microsoft.com/en-us/library/ee634398.aspx
これらのページは、SQL2008R2 でも利用できることを暗示していますが、そうであるかどうかをテストするのに便利なものはありません。
使用例 (オーストラリアの日時):
FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
使用できますDATEPART(DATEPART, VARIABLE)
。例えば:
DECLARE @DAY INT
DECLARE @MONTH INT
DECLARE @YEAR INT
DECLARE @DATE DATETIME
@DATE = GETDATE()
SELECT @DAY = DATEPART(DAY,@DATE)
SELECT @MONTH = DATEPART(MONTH,@DATE)
SELECT @YEAR = DATEPART(YEAR,@DATE)
または: Cast
_Convert
の構文CAST
:
CAST ( expression AS data_type [ (length ) ])
の構文CONVERT
:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
http://msdn.microsoft.com/en-us/library/ms187928.aspx
実際には、特定の形式を要求したため:
REPLACE(CONVERT(varchar(10), Date, 102), '.', '-')
-- これにより、'yyyy-mm-dd 00:00:00.000' の形式で時刻が 0 になります。
SELECT CAST( CONVERT(VARCHAR, GETDATE(), 101) AS DATETIME) ;
Microsoft SQL Server の場合:
CONVERT の構文を使用します。
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
例:
SELECT CONVERT(varchar,d.dateValue,1-9)
スタイルの詳細については、MSDN - Cast and Convert (Transact-SQL) を参照してください。
次のことを試してください。
CONVERT(VARCHAR(10),GetDate(),102)
次に、「。」を置き換える必要があります。と "-"。
これは私がそれを行う方法です:CONVERT(NVARCHAR(10), DATE1, 103) )
declare @dt datetime
set @dt = getdate()
select convert(char(10),@dt,120)
char(10)
特定の文字列形式が必要なため、データ長を固定しています。
OPは日時形式を述べました。私にとっては、時間の部分が邪魔になります。
フォーマットする前に (datetime を date にキャストすることによって) 時間部分を削除する方が少しきれいだと思います。
convert( varchar(10), convert( date, @yourDate ) , 111 )
このSQLを試してください:
select REPLACE(CONVERT(VARCHAR(24),GETDATE(),103),'/','_') + '_'+
REPLACE(CONVERT(VARCHAR(24),GETDATE(),114),':','_')
どのデータベースかは言いませんでしたが、mysqlを使用すると、タイムスタンプから日付を取得する簡単な方法があります(varchar型変換は自動的に行われるはずです)。
mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2008-09-16 |
+-------------+
1 row in set (0.00 sec)
CONVERT(VARCHAR, GETDATE(), 23)
関数を書く
CREATE FUNCTION dbo.TO_SAP_DATETIME(@input datetime)
RETURNS VARCHAR(14)
AS BEGIN
DECLARE @ret VARCHAR(14)
SET @ret = COALESCE(SUBSTRING(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(26), @input, 25),'-',''),' ',''),':',''),1,14),'00000000000000');
RETURN @ret
END
どの言語かはわかりませんC#/.NET
が、ネイティブのDateTime
データ型を持っているためだと思います。その場合、ToString
メソッドを使用して変換し、次のようなフォーマット指定子を使用します。
DateTime d = DateTime.Today;
string result = d.ToString("yyyy-MM-dd");
ただし、これをデータベース クエリで使用したり、SQL ステートメントに連結したりしないように注意してください。データベースでは、特定のフォーマット文字列を使用する必要があります。時間の部分をゼロにして、DateTime を SQL パラメータとして使用することをお勧めします。