SQL Server:一起添加两次并附加到给定日期

时间:2015-06-18 12:29:56

标签: sql sql-server

SQL Server:一起添加两次并附加到给定日期

enter image description here

此处startTimevarchar

  • sd表示startDate
  • ed表示endDate

必需的新列是:

    1. sd + startTime例如:2015-06-09 23:00
    1. ed + (startTime + duration)例如:2015-08-23 00:30

请在此明确注意时间。

谢谢

2 个答案:

答案 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)