SQL Server:一起添加两次并附加到给定日期
此处startTime
为varchar
sd
表示startDate ed
表示endDate 必需的新列是:
sd + startTime
例如:2015-06-09 23:00 ed + (startTime + duration)
例如:2015-08-23 00:30 请在此明确注意时间。
谢谢
答案 0 :(得分:4)
我认为你需要这样的东西: -
Set Nocount On;
Declare @sd Date
,@time Varchar(5)
,@ed Date
,@Duration Varchar(8)
Select @sd = '2015-06-09'
,@time = '23:00'
,@ed = '2015-08-22'
,@Duration = '01:30:00'
Select Cast(@time As Datetime) + Cast(@sd As Datetime) As startdate
,Cast(@ed As Datetime) + Cast(@time As Datetime) + Cast(@Duration As Datetime) As enddate
修改: - 强>
Set Nocount On;
If Object_Id('tempdb.dbo.#DateTimeTogather') Is Not Null
Begin
Drop Table #DateTimeTogather;
End
Create Table #DateTimeTogather
(
scheduleId Int Primary Key
,startTime Varchar(5)
,sd Date
,programId Int
,ed Date
,duration Time
)
Insert Into #DateTimeTogather(scheduleId,startTime,sd,programId,ed,duration) Values
(20,'23:00','2015-06-09',50,'2015-08-22','01:30:00')
,(21,'09:00','2015-06-07',29,'2015-08-22','00:45:00')
,(22,'14:00','2015-06-06',14,'2015-08-22','00:35:00')
,(23,'17:30','2015-06-13',7,'2015-06-13','00:45:00')
,(24,'19:00','2015-06-06',65,'2015-06-27','00:30:00')
,(25,'10:00','2015-06-06',81,'2015-06-17','04:12:00')
,(26,'17:00','2015-06-06',7,'2015-06-27','00:45:00')
,(27,'12:30','2015-06-06',7,'2015-06-27','00:45:00')
Select dt.scheduleId
,Cast(dt.sd As Datetime) + Cast(dt.startTime As Datetime) As startdate
,Cast(dt.ed As Datetime) + Cast(dt.startTime As Datetime) + Cast(dt.duration As Datetime) As enddate
From #DateTimeTogather As dt With (Nolock)
这没有错误
答案 1 :(得分:0)
好的,鉴于你是一个varchar数据类型,我将不得不忽略它并假设你的sd列读取dd-mmm-yyyy 00:00:00。如果是SQL Server 2008+,您可以使用下面的代码在午夜给出日期。
static ContentAndDAO contentAndDao = new ContentAndDAO();
public static void main(String[] args)
{
int manifestNum;
long contentId = 111111;
long devFileId = 222222;
List<DevFile> fileList;
List<DevSupport> supports = null;
List<ContentDev> contentList = new ArrayList<ContentDev>();
ContentDevDAO contentDevDao = new ContentDevDAO();
DevFileDAO devFileDao = new DevFileDAO();
ManifestMethods manifestMethods = new ManifestMethods();
DevFile apkFile = null;
try
{
manifestNum = 1;
File dir = new File("C:\\Users\\lenovo 01\\Desktop\\basari\\buulkcontent\\klasorlenen");
String[] extensions = new String[] {"apk"};
List<File> files = (List<File>) FileUtils.listFiles(dir, extensions, true);
Collections.sort(files);
for(File file : files)
{
apkFile = new DevFile();
fileList = new ArrayList<DevFile>();
if(file.getName().contains(".apk"))
{
FileInputStream fis = new FileInputStream(new File(file.getAbsolutePath()));
String apkMd5 = DigestUtils.md5Hex(fis);
fis.close();
System.out.println(file);
System.out.println(file.length());
System.out.println(apkMd5.toUpperCase());
System.out.println(contentId);
apkFile.setByteSize(file.length());
apkFile.setUrl("/file/getContent/" + contentDevDao.createId(contentId) + "/" + apkMd5.toUpperCase() + "/apk");
apkFile.setThumbnailUrl("/file/getContent/" + contentDevDao.createId(contentId) + "/" + apkMd5.toUpperCase() + "/apk");
apkFile.setDeleteUrl("/file/deleteContent/" + contentDevDao.createId(contentId) + "/" + apkMd5.toUpperCase() + "/apk");
apkFile.setFileHash(apkMd5.toUpperCase());
apkFile.setFilePath("content/" + contentDevDao.createId(contentId) + "/" + apkMd5.toUpperCase() + ".apk");
apkFile.setFileName(manifestMethods.getApplicationName(manifestNum).replaceAll(" ", "-") + ".apk");
apkFile.setName(manifestMethods.getApplicationName(manifestNum).replaceAll(" ", "-"));
apkFile.setPackageVersion(manifestMethods.getVersionName(manifestNum));
apkFile.setPackageName(manifestMethods.getPackageName(manifestNum));
apkFile.setPackageVersionCode(manifestMethods.getVersionCode(manifestNum));
apkFile.setSdkVersion(manifestMethods.getSdkVersion(manifestNum));
contentId++;
devFileId++;
manifestNum++;
}
}
for(int y = 1; y <= 53; y++)
{
manifestNum = 1;
fileList = new ArrayList<DevFile>();
DevFile file = new DevFile();
ContentDev content = new ContentDev();
/* some DevFile file addings */
fileList.add(file);
content.setDevFiles(fileList);
contentList.add(content);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
在正确转换所有日期和时间之后,下面的查询应该这样做:
CONVERT(DATE,sd, 101)