SQL備忘 時刻指定で日付を変更する

難しくはないけど、思い出すのは大変なんですね。

キーワード

 WHEN   THEN  END  列名

CONVERT(VARCHAR,[LDatetime],108)

CONVERT(Date,CONVERT(varchar,[LDatetime],111))

 

日付時刻は 深夜24時で、日付が変更されますが、
実際の稼働日は、朝6時 や 朝8時30分 に 日付が変更されます。
 
そんなとき、利用するのが、日付時刻を判断して、日付を変更することです。
以下の例は、日付時刻(LDateTime)を 8:30で日付変更しています。
変更後の列名を WorkDay
-----------------------
select[AAA]
   ,CASE WHEN CONVERT(VARCHAR,[LDatetime],108) >= convert(varchar,'08:30:00',108) THEN            CONVERT(Date,CONVERT(varchar,[LDatetime],111))
   WHEN CONVERT(VARCHAR,[LDatetime],108) < convert(varchar,'08:30:00',108) THEN   CONVERT(Date,CONVERT(VARCHAR,[LDatetime]-1,111)) END WorkDay
from dbo.tbl
---------------------

久しぶり 実家へ

昨日 姫路の実家へ行きました。母の一人ぐらしです。

母は 最近将棋に凝っていて、BSTVで一日中将棋番組をみている。

 

「一局やろか」と対局。

あと数年で90歳になろうかという母が、普通に将棋させることで安心しました。

 

つい 気持ちが大きくなって、
お土産を購入
 

 
これは 父が入院のときに好んだ手土産で、懐かしくて買いました。
 

 
これは はずせない 高校時代から馴染んだ 駅ソバ

 
 

他のExcelブックの内容を、開かずに見る シート名取得

ブックの中を見るとき、シート名が可変の時があります。

例 [日報0812] というように、シート名に日付が付与されています。

こんなときは、シート名の一覧を取得し、それから、対象シートを絞り込むことになります。

ADOを使う方法があったので、

シート名の配列を返す関数をつくりました。


'******************************************************************************************
' Name : fnc_GetShName '指定ブックのシート名一覧を取得する
' Return : シート名(配列)
' Param : sFile = 指定ブック名
'
'******************************************************************************************
Public Function fnc_GetShName(ByVal sFile As String) As String()
Dim objCn As New ADODB.Connection
Dim objRS As ADODB.Recordset
Dim sSheet As String
Dim i As Long

Dim sRes() As String

'
If sFile = "False" Then
Exit Function
End If

With objCn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0"
.Open sFile 'ReadOnly:=True
Set objRS = .OpenSchema(ADODB.adSchemaTables)
End With
ReDim sRes(0)
i = 0

Do Until objRS.EOF
sSheet = objRS.Fields("TABLE_NAME").value
If Right(sSheet, 1) = "$" Or Right(sSheet, 2) = "$'" Then
If Right(sSheet, 1) = "$" Then
sSheet = Left(sSheet, Len(sSheet) - 1)
End If
If Right(sSheet, 2) = "$'" Then
sSheet = Left(sSheet, Len(sSheet) - 2)
End If
If Left(sSheet, 1) = "'" Then
sSheet = Mid(sSheet, 2)
End If
sSheet = Replace(sSheet, "''", "'")

'sResに記入
ReDim Preserve sRes(i)
sRes(i) = sSheet
i = i + 1
End If
objRS.MoveNext
Loop
fnc_GetShName = sRes
objRS.Close
objCn.Close
Set objRS = Nothing
Set objCn = Nothing
End Function