获取getdate()的前n个字符

时间:2019-08-15 17:09:02

标签: sql sql-server ssms-2014

我有一个案例比较日期,datetime的小时数列和当前日期,小时

private void DrawPoints() {
        bool hasReversed = false;
        bool reversedLeft = false;

        var leftEdge = mainCamera.ScreenToWorldPoint(new Vector3(0, 0, 0));
        var rightEdge = mainCamera.ScreenToWorldPoint(new Vector3(Screen.width, 0, 0));
        var normalDir = shootDir.normalized;

        int count = 0;

        for (var i = 0; i < dots.Count; i++) {
            var dot = dots[i];
            dot.GetComponent<SpriteRenderer>().color = color;

            var newPos = new Vector2(normalDir.x, normalDir.y) * i * DotGap;
            if (hasReversed) {
                newPos.x += reversedLeft ? (-rightEdge.x + Constants.BubbleRadius/2) * 2 * count : (rightEdge.x - Constants.BubbleRadius/2) * 2 * count;
                //newPos.x += reversedLeft ? (-rightEdge.x + Constants.BubbleRadius) * 2 : (rightEdge.x - Constants.BubbleRadius) * 2;
            }

            //newPos += normalDir * delta;

            dot.transform.localPosition = newPos;

            RaycastHit2D hit = Physics2D.Raycast(newPos, shootDir);
            if (hit.collider != null) {
                float distance = Vector2.Distance(hit.transform.position, newPos);
                if (distance < Constants.WhiteCircleRadius + Constants.BubbleRadius) {
                    dot.SetActive(false);
                    Debug.Log("Found!: " + distance + " " + hit.collider.name);
                    break;
                } else {
                    dot.SetActive(true);
                }
            }

            if (dot.transform.localPosition.x <= leftEdge.x + Constants.BubbleRadius) {
                hasReversed = true;
                reversedLeft = true;
                normalDir = Vector2.Reflect(normalDir, Vector2.left);
                count++;
            }
            else if (dot.transform.localPosition.x >= rightEdge.x - Constants.BubbleRadius) {
                hasReversed = true;
                reversedLeft = false;
                normalDir = Vector2.Reflect(normalDir, Vector2.right);
                count++;
            }
        }
    }

select * from tbl where LEFT(EVENT_TIME_column,13) !=LEFT(GETDATE(),13) 的格式为EVENT_TIME_column

当我执行'2019-08-15 12:32:40.0000000'时的结果是'LEFT(GETDATE(),13)

您能建议如何在Aug 15 2019'(日期和小时)中获取GETDate()

3 个答案:

答案 0 :(得分:2)

如果您想要格式 yyyy-MM-dd hh,则可以执行以下操作:

SELECT CONVERT(varchar(13),GETDATE(),120);

db<>fiddle

您可以在文档Date and Time Styles

中找到CONVERT的所有样式代码的完整列表。

但是,您似乎想检查日期是否在当前小时内。那应该是:

WHERE EVENT_TIME_column >= DATEADD(HOUR, DATEDIFF(HOUR, 0,GETDATE()),0)
  AND EVENT_TIME_column < DATEADD(HOUR, DATEDIFF(HOUR, 0,GETDATE())+1, 0)

这明确避免了列EVENT_TIME_column上的任何功能;这将使查询无法显示。

答案 1 :(得分:1)

不要在日期/时间值上使用字符串函数!有非常好的内置函数:

where convert(date, event_time_column) = convert(date, getdate()) and
      datepart(hour, event_time_column) = datepart(hour, getdate())

如果您不关心索引的使用,请使用datediff()

where datediff(hour, event_time_column, getdate()) = 0

答案 2 :(得分:1)

您可以通过以下2个单独的比较来进行检查。这是用于检查日期和小时部分是否与GETDATE()相同的日期和小时部分。

WHERE CAST(EVENT_TIME_column AS DATE) = CAST(GETDATE() AS DATE)
AND DATEPART(HH,EVENT_TIME_column) =  DATEPART(HH,GETDATE())

要检查不等于,只需将=符号替换为!=符号。

此外,如果我猜对了,那么您只是想避免记录运行至今的时间。在这种情况下,您还可以使用以下逻辑过滤数据-

WHERE EVENT_TIME_column < DATEADD(hh, DATEDIFF(hh, 0, getdate()), 0)
相关问题