복붙노트

[SQL] 매장 달 년 만에 MySQL의 데이터 형

SQL

매장 달 년 만에 MySQL의 데이터 형

나는 MySQL은 관계형 데이터베이스에 학생 데이터를 저장하는 PHP 응용 프로그램을 쓰고 있어요. 나는 함께 일없이 월 및 연도를 저장하는 가장 좋은 방법 / 데이터 유형을 찾기 위해 노력하고있어. 난 그냥 단지 1로 하루 저장하거나 내가 가진 현재 잘 알고 아니에요 다른 데이터 유형을 사용하는 DATE 및 사용 PHP를 어떻게든지로 저장할지 여부를 알 수 없습니다. 이상적으로, 나는 날이 항상 동일하지 않을 것이며, 날이 미래에 변경 한 경우 PHP 소스 코드를 변경 요구하기 때문에, 하루에 저장하지 않습니다.

그냥 더 배경 정보를 원하시면, 나는 학생의 INTENT_TO_GRAD를 저장하고있다. 클라이언트는 참조 또는 데이터 조작을 위해 그것을 사용하는 것이 아니라 보고서에 대한 시각이 정보를하려는 경우에만 보인다. 즉,이 데이터에 대한 유일한 기능 요구 사항은 보고서에 표시 될 것입니다.

해결법

  1. ==============================

    1.왜 귀찮게? 당신은 단지 그것의 일부 필요하면 그냥 () 데이터베이스 기능 MONTH () 및 연도 (아마도 항상 날이 처음 사용) 완전한 날짜로 저장하고 사용합니다. 당신은 여전히 ​​범위 질의 등을 할 수있는만큼 쉽게 해당 필드를 사용하여이 만든다

    왜 귀찮게? 당신은 단지 그것의 일부 필요하면 그냥 () 데이터베이스 기능 MONTH () 및 연도 (아마도 항상 날이 처음 사용) 완전한 날짜로 저장하고 사용합니다. 당신은 여전히 ​​범위 질의 등을 할 수있는만큼 쉽게 해당 필드를 사용하여이 만든다

  2. ==============================

    2.그것은 당신이 부분 날짜를 저장할 수있는 MySQL의 설명서에 말한다

    그것은 당신이 부분 날짜를 저장할 수있는 MySQL의 설명서에 말한다

    http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format

    올해 만 달 저장할 수있는이 방법, 당신은 DATE 열을 사용하여 일 대신 00를 넣을 수 있습니다. 예컨대 2013-12-00.

    관련 : MySQL의 날짜 필드에 저장 불완전 날짜

  3. ==============================

    3.당신이 데이터를 사용하려고하는 방법을 고려한다. 당신이 만들 필요가있는 보고서가있는 경우, 어떤 방법으로보다 쉽게 ​​데이터를 검색하고 작업 할 수 있도록 것인가?

    당신이 데이터를 사용하려고하는 방법을 고려한다. 당신이 만들 필요가있는 보고서가있는 경우, 어떤 방법으로보다 쉽게 ​​데이터를 검색하고 작업 할 수 있도록 것인가?

    그리고 당신은 날짜 유형 필드를 사용할 필요가 없습니다. 당신은 단지 년도 필드와 모두 정수 한 달에 필드를 가질 수있다. 당신이 실제로 날짜를 필요로 표현의 모든 종류의 작업을 수행해야 할 때 그런 다음 날짜로 함께 캐스팅 넣어 쉬운 정도입니다.

    그리고 1과 일 번호와 날짜로 저장하고 그냥 무시하고 너무 완벽하게 좋아하고 공정하게 정상입니다. 결국이 난 그냥 당신이 가장 좋아하는 하나를 선택할 것하고 끝낼 수 있도록 (상대적으로 말하기) 훨씬 상관거야 결정이 아니다.

  4. ==============================

    4.나는 정수로 두 개의 별도 항목을 저장합니다. 그것은 검증 케이크를 만들어 빠르고 쉽게 정렬 및 그룹화 가능성을 허용합니다.

    나는 정수로 두 개의 별도 항목을 저장합니다. 그것은 검증 케이크를 만들어 빠르고 쉽게 정렬 및 그룹화 가능성을 허용합니다.

  5. ==============================

    5.

    SELECT * FROM Users
    WHERE 
        MONTH(DateTime) = '07'
    AND 
        YEAR(DateTime) = '2015'
    AND 
        DAY(DateTime) = '26'
    

    당신은 위의하지만 여전히 인덱싱하고 매우 큰 데이터를 적용 할 때까지 당신은 그것의 쓸모없는, 분리 등의 저장 년 / 월, 일을하려는 경우처럼 필터링 할 수 있습니다.

  6. ==============================

    6.또 다른 해결 방법은 DATETIME / DATE 소스에서 빌드 생성 된 컬럼이다.

    또 다른 해결 방법은 DATETIME / DATE 소스에서 빌드 생성 된 컬럼이다.

    ALTER TABLE stats 
    ADD COLUMN year SMALLINT GENERATED ALWAYS AS (YEAR(stat_date)) NOT NULL,
    ADD COLUMN month smallint GENERATED ALWAYS AS (MONTH(stat_date)) NOT NULL;
    

    배경

    나는 비슷한 문제가 있었다. 이 스레드를 읽은 후, 나는 (제로로) 불완전 날짜를 저장하기로 결정했다. 그것은 MySQL의 이전 버전에 근무하지만, 최신 버전은 "잘못된 일"오류가 발생. 앞서 언급 한 바와 같이, 당신은 NO_ZERO_IN_DATE 설정을 사용하여 경고에 오류를 켤 수 있습니다. 하지만 설정 자체는 사용되지 않습니다. 따라서, 미래에, 단지 오류의 다른 유형의 침묵, 따라서 엄격한 모드를 사용하지 않도록 설정하여 날짜에 0을 지원하는 것이 가능하다.

    내 요구 사항은 테이블의 월별보기를 구축하는 것이 었습니다. 나는 한 달에 인덱스를 추가했다. 옵션이 아니었다 - 더 - 플라이 YEAR ()와 MONTH (와) 그래서, 나방을 계산.

    생성 된 열은 자신의 목적을 봉사했다. 년 및 월 열은 기본 인덱스의 일부가 아닌, 그리고 심지어 가상 (스토어드) 생성 된 컬럼에 공간 덕분에 절약 할 수있다.

    연결

  7. ==============================

    7.당신은 상점 월과 연도에만 VARCHAR의 데이터 유형을 사용할 수 있습니다.

    당신은 상점 월과 연도에만 VARCHAR의 데이터 유형을 사용할 수 있습니다.

    날짜 선택기를 사용하는 사람들을 위해 : -

    매장 월 및 연도에 MySQL의 1)을 설정 VARCHAR 데이터 타입.

    2) 당신이 JQuery와 유효성 검사 및 유무 JQuery와 플러그인 날짜 선택기를 사용하는 경우 당신은 코드 아래해야한다.

    예를 들면 : -

    <script>
    
    $(document).ready(function (){
    
    $('#monthyear').datepicker({
      autoclose:true,
      format:'mm-yy'
    });
    
    //Your form validation code here//
    
    });
    </script>
    
  8. from https://stackoverflow.com/questions/9134497/mysql-datatype-to-store-month-and-year-only by cc-by-sa and MIT license